假设我有以下数据
import pandas as pd
df = pd.DataFrame(data=[[1, 'a'], [1, 'aaa'], [1, 'aa'],
[2, 'bb'], [2, 'bbb'],
[3, 'cc']],
columns=['key', 'text'])
key text
0 1 a
1 1 aaa
2 1 aa
3 2 bb
4 2 bbb
5 3 cc
我想做的是按 key 分组变量并按 text 的长度对每组内的数据进行排序最后得到一个 Series用于重新索引数据帧的索引值。我以为我可以做这样的事情:
df.groupby('key').text.str.len().sort_values(ascending=False).index
但是它说我需要使用apply ,所以我尝试了这个:
df.groupby('key').apply(lambda x: x.text.str.len().sort_values(ascending=False).index, axis=1)
但这告诉我 lambda得到一个意想不到的关键词:axis .
我对 pandas 比较陌生,所以我不确定该怎么做。此外,我的目标是简单地删除重复数据,以便每个 key ,我保留最长值为text的值.预期的输出是:
key text
1 1 aaa
4 2 bbb
5 3 cc
如果有比我正在尝试的更简单的方法来做到这一点,我也愿意接受。
请您参考如下方法:
不需要中间步骤。您可以获得一个字符串长度如下的系列:
df['text'].str.len()
现在 juut groupby 键,并使用 idxmax() 返回字符串长度最大的索引值
In [33]: df.groupby('key').agg(lambda x: x.loc[x.str.len().idxmax()])
Out[33]:
text
key
1 aaa
2 bbb
3 cc
