如何用Pandas按单列聚合多列?现有单列聚合代码需扩展
解决方案
要实现按Group列对多列进行聚合(将每组元素用逗号拼接),无需逐列单独处理,用pandas的agg方法可批量完成,适配你12列的场景,比原代码更高效简洁。
方法1:定义通用聚合函数批量处理
先写一个通用的拼接函数,再指定所有需要聚合的列,一次性完成分组聚合:
import pandas as pd # 示例数据集 data = { 'Group': ['A', 'A', 'B', 'B', 'A', 'B'], 'Value': [1, 2, 3, 4, 5, 6], 'Qty': [100, 202, 403, 754, 855, 1256] } df = pd.DataFrame(data) # 定义聚合逻辑:将列内元素转为字符串后用逗号拼接 def concat_group_values(x): return ', '.join(map(str, x)) # 指定需要聚合的列(实际场景可直接扩展为12列的列名列表) target_cols = ['Value', 'Qty'] result = df.groupby('Group')[target_cols].agg(concat_group_values).reset_index() print(result)
运行输出:
Group Value Qty 0 A 1, 2, 5 100, 202, 855 1 B 3, 4, 6 403, 754, 1256
方法2:用lambda简化代码(无需单独定义函数)
如果不想额外写函数,直接在agg中嵌入lambda表达式即可:
target_cols = ['Value', 'Qty'] result = df.groupby('Group')[target_cols].agg(lambda x: ', '.join(map(str, x))).reset_index()
原代码的局限说明
原代码中groupby('Group')['Value']仅选中单列,后续apply逻辑只能处理单列数据。而agg方法支持同时对多列应用相同聚合规则,自动保留原列名,只需把所有要聚合的列名加入target_cols列表,就能轻松适配12列的需求。
内容的提问来源于stack exchange,提问作者Paulo Alves
相关产品推荐
相关产品推荐

