如何在Pandas DataFrame中聚合重复行并将值转为列表
高效通用的Pandas重复行合并方法(适配百万级数据)
嘿,针对你遇到的百万级重复行合并需求,完全不用再写单独脚本啦!Pandas自带的groupby+agg组合就是最通用且高效的解决方案,比手动循环快得多,而且能适配各种表格结构。
核心通用函数
直接用这个函数就能搞定任意表格的分组合并需求,只需要传入原始DataFrame、分组列名和要聚合的列名:
import pandas as pd def remove_duplicates_generic(df, group_column, aggregate_column): # 按指定列分组,将目标列的值聚合为列表,最后重置索引回到常规格式 return df.groupby(group_column)[aggregate_column].agg(list).reset_index()
测试你的示例数据
用你给出的样例数据来验证:
原始数据:
col1 col2 0 1 23 1 1 47 2 1 58 3 1 9 4 1 4
调用函数:
# 构造示例DataFrame sample_df = pd.DataFrame({ 'col1': [1, 1, 1, 1, 1], 'col2': [23, 47, 58, 9, 4] }) # 执行去重合并 result_df = remove_duplicates_generic(sample_df, 'col1', 'col2') print(result_df)
输出结果完全符合你的期望:
col1 col2 0 1 [23, 47, 58, 9, 4]
扩展:多列不同规则聚合
如果你的表格还有其他列需要保留(比如要保留每组的第一个值、均值等),可以扩展这个函数,传入聚合规则字典:
def remove_duplicates_generic_extended(df, group_column, agg_rules): # agg_rules示例:{'col2': list, 'col3': 'first', 'col4': 'mean'} return df.groupby(group_column).agg(agg_rules).reset_index()
比如你有col3需要保留每组第一个值,就这么用:
extended_result = remove_duplicates_generic_extended( sample_df_with_col3, 'col1', {'col2': list, 'col3': 'first'} )
为什么这个方法适合百万级数据?
你之前用的手动循环方式在数据量变大时会非常慢,而Pandas的groupby是底层优化过的操作,能高效处理百万甚至千万级别的数据,内存占用和执行速度都远优于手动遍历。
内容的提问来源于stack exchange,提问作者OneMatzo
相关产品推荐
相关产品推荐

