python - 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
如何做到这一点?
解决方案
使用assign
with 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
推荐阅读
- python - Django显示找不到页面
- apache-kafka - 如何为 Kafka Connect AVRO 使用 Schema 注册表
- html - 引导滑块在右侧显示图像
- python - 在尝试对 python 3 上的分配代码进行故障排除时遇到一些问题
- php - Codeception4:GroupManager 报告缺少测试文件
- python - 如何将这两个 python 脚本添加在一起?
- ignite - ClientCacheConfiguration 未保存到表中
- java - 如何绕过 javax.validation.ValidationException:HV000064:无法实例化 ConstraintValidator:在 Spring
- javascript - 带有动漫js的Svg变形不改变路径
- c# - .NET Core 3.1 - 无法加载文件或程序集 System.Runtime,版本 = 4.2.2.0