首页 > 解决方案 > Pandas groupby 得到最小的字符串

问题描述

我有以下数据框:

df = pd.DataFrame({'id': 3*['a']+4*['b'], 'name':['al', 'qwer', 'l', 'ewdbd', 'op', 'qsde', 'knmkln']})
id    name
 a      al
 a    qwer
 a       l
 b   ewdbd
 b      op
 b    qsde
 b  knmkln

我想对 id 进行分组并获取名称中最短的字符串,如果有多个字符串的最小长度可以是任何字符串,则最终数据帧将是:

id    name
a      l
b      op

如何做到这一点?

标签: pythonpandaspandas-groupby

解决方案


使用assignwith drop_duplicates,在大多数情况下,这应该比 更快groupby

(df.assign(length=df['name'].str.len())
.sort_values('length')
.drop_duplicates('id')
.drop(columns='length')
)

或者没有drop操作,如评论中所述,相对较慢Ben.T

df.loc[df['name'].str.len().sort_values().index].drop_duplicates(subset='id')

  id name
2  a    l
4  b   op

推荐阅读