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()返回索引值,其中字符串的长度最大