You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:01:58