Skip to main content
 首页 » 编程设计

python之按组内的字符串长度过滤 pandas DataFrame

2025年05月04日41txw1958

假设我有以下数据

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