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

如何简化Pandas多列分组聚合(sum/count)的代码编写

Pandas分组聚合简化实现方案

需求说明

对以下Pandas DataFrame按H1、H2列分组聚合:

  • V1、V2、V3列执行sum求和操作
  • V4、V5、V6、V7、V8列执行count计数操作

DataFrame定义代码:

import pandas as pd

df_p = pd.DataFrame({'H1':['A1','A1','C1','B1','A1','C1'],
                     'H2':['X1','Y1','Z1','X1','Y1','Z1'],
                     'V1':[1,2,3,4,5,6],
                     'V2':[10,20,30,40,50,60],
                     'V3':[100,200,300,400,500,600],
                     'V4':[1000,2000,3000,4000,5000,6000],
                     'V5':[11,12,13,14,15,16],
                     'V6':[110,120,130,140,150,160],
                     'V7':[1100,1200,1300,1400,1500,1600],
                     'V8':[1100,1200,1300,1400,1500,1600],})

常见问题

直接使用列表作为聚合字典的键会触发语法错误,如下写法无效:

# 错误写法:字典键不能为列表
df_p.groupby(['H1','H2']).agg({['V1','V2','V3']:'sum',['V4','V5','V6','V7','V8']:'count'})

逐个列指定聚合函数的写法可行,但列数较多时操作繁琐:

# 可行但繁琐的写法
df_p.groupby(['H1','H2']).agg({'V1':'sum','V2':'sum','V3':'sum','V4':'count','V5':'count','V6':'count','V7':'count','V8':'count'})

简化实现方案

通过列分组+字典推导式快速构建聚合规则字典,只需维护两个列列表即可,适合大量列的场景:

方法1:字典推导式合并

# 定义需要聚合的列组
sum_cols = ['V1', 'V2', 'V3']
count_cols = ['V4', 'V5', 'V6', 'V7', 'V8']

# 构建聚合字典
agg_dict = {col: 'sum' for col in sum_cols} | {col: 'count' for col in count_cols}

# 执行分组聚合
result = df_p.groupby(['H1', 'H2']).agg(agg_dict)

方法2:字典update方法

如果使用Python版本低于3.9(不支持|字典合并运算符),可以用update方法:

sum_cols = ['V1', 'V2', 'V3']
count_cols = ['V4', 'V5', 'V6', 'V7', 'V8']

agg_dict = {}
agg_dict.update({col: 'sum' for col in sum_cols})
agg_dict.update({col: 'count' for col in count_cols})

result = df_p.groupby(['H1', 'H2']).agg(agg_dict)

方法3:动态列筛选(可选)

如果列名有规律(比如前缀一致),还可以通过列名筛选自动生成列组,进一步简化:

# 自动筛选目标列(示例,根据实际列名规律调整)
sum_cols = [col for col in df_p.columns if col in ['V1','V2','V3']]
count_cols = [col for col in df_p.columns if col.startswith('V') and int(col[1:]) >=4]

agg_dict = {col: 'sum' for col in sum_cols} | {col: 'count' for col in count_cols}
result = df_p.groupby(['H1', 'H2']).agg(agg_dict)

内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:31:03