pandas按单列分组将其他列值聚合为列表的最高效方法
pandas按指定列合并行并汇总其余列为列表的高效实现
功能目标
按指定列的相同取值合并数据行,将其余所有列的匹配取值汇总为单个列表。
测试样例
原始DataFrame构造
import pandas as pd df = pd.DataFrame({ 'Animal': ['Falcon', 'Parrot', 'Parrot', 'Falcon'], 'Max Speed': ['380.', '370.', '24.', '26.'] })
原始数据输出:
Animal Max Speed 0 Falcon 380. 1 Parrot 370. 2 Parrot 24. 3 Falcon 26.
现有实现逻辑
当前使用的实现代码:
test = df.groupby(['Animal']).agg(lambda x: tuple(x)).applymap(list).reset_index()
对应输出结果:
Animal Max Speed 0 Falcon [380., 26.] 1 Parrot [370., 24.]
效率优化方案
无需依赖自定义lambda和二次格式转换,直接使用pandas原生聚合逻辑即可得到完全一致的输出结果,运行效率更高:
test = df.groupby('Animal', as_index=False).agg(list)
- 原生
list聚合走底层C实现路径,没有自定义lambda的Python层逐组调用开销 - 聚合阶段直接生成列表类型结果,不需要额外调用
applymap完成tuple到list的转换,减少一次全量数据遍历 as_index=False可直接完成分组后的索引重置,无需单独调用reset_index()
该实现保留了原数据组内的行顺序,在十万行以上的大数据量场景下性能可提升数倍,输出结果与原有实现完全匹配。
内容的提问来源于stack exchange,提问作者SantoshGupta7
相关产品推荐
相关产品推荐

