Python 按组内字符串长度筛选数据帧
假设我有以下数据Python 按组内字符串长度筛选数据帧,python,pandas,Python,Pandas,假设我有以下数据 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 aa
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
我想做的是按键
变量分组,并按文本
的长度对每组中的数据进行排序,最后得到一系列索引值,用于重新索引数据帧。我想我可以这样做:
df.groupby('key').text.str.len().sort_values(ascending=False).index
df['text'].str.len()
但它说我需要使用apply
,所以我尝试了以下方法:
df.groupby('key').apply(lambda x: x.text.str.len().sort_values(ascending=False).index, axis=1)
但这告诉我,lambda
得到了一个意外的关键字:axis
我对熊猫比较陌生,所以我不知道该怎么做。另外,我的目标是简单地消除重复数据,这样对于每个键
,我都会使用文本
的最长值保留该值。预期产出为:
key text
1 1 aaa
4 2 bbb
5 3 cc
如果有比我正在尝试的更简单的方法,我也愿意接受
df.groupby('key', as_index=False).apply(lambda x: x[x.text.str.len() == x.text.str.len().max()])
输出:
key text
0 1 1 aaa
1 4 2 bbb
2 5 3 cc
输出:
key text
0 1 1 aaa
1 4 2 bbb
2 5 3 cc
输出:
key text
0 1 [aaa]
1 2 [bbb]
2 3 [cc]
输出:
key text
0 1 [aaa]
1 2 [bbb]
2 3 [cc]
不需要中间步骤。可以得到字符串长度如下的序列:
df.groupby('key').text.str.len().sort_values(ascending=False).index
df['text'].str.len()
现在输出groupby键,并使用idxmax()返回索引值,其中字符串的长度最大
不需要中间步骤。可以得到字符串长度如下的序列:
df.groupby('key').text.str.len().sort_values(ascending=False).index
df['text'].str.len()
现在输出groupby键,并使用idxmax()返回索引值,其中字符串的长度最大