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

Pandas分组后如何对不同列分别执行求和、求平均等不同聚合操作

你可以直接使用 pandas 内置的 agg() 方法实现该需求,这个方法本身就支持为不同列指定不同的聚合规则,后续新增聚合规则也只需要修改对应配置即可,非常灵活。

实现步骤

  1. 首先调整字段筛选逻辑,把后续要用到的Bid字段也加入待处理数据中
  2. 分组时使用agg()方法指定各字段的聚合规则,推荐使用 pandas 0.25 版本新增的命名聚合语法,可以直接指定聚合后的字段名,无需额外重命名:
# 筛选所有需要用到的字段
db_profit_platform = db[['Source','Device','Country','Profit','Bid']]

# 分组 + 多列不同聚合,as_index=False 可以避免后续再调用reset_index()
db_profit_final = db_profit_platform.groupby(
    ['Source','Device','Country'],
    as_index=False
).agg(
    SumProfit = ('Profit', 'sum'), # 对Profit列求和,结果列名为SumProfit
    AverageBid = ('Bid', 'mean')   # 对Bid列求平均值,结果列名为AverageBid
)

如果你使用的pandas版本低于0.25,不支持命名聚合语法,可以用字典传入聚合规则,执行完成后再重命名列即可:

# 低版本兼容写法
db_profit_platform = db[['Source','Device','Country','Profit','Bid']]

db_profit_final = db_profit_platform.groupby(
    ['Source','Device','Country'],
    as_index=False
).agg({
    'Profit': 'sum',
    'Bid': 'mean'
})

# 重命名为需要的字段名
db_profit_final.rename(columns={
    'Profit': 'SumProfit',
    'Bid': 'AverageBid'
}, inplace=True)

后续扩展方式

如果后续需要新增其他聚合规则,只需要做两处调整即可:

  • 把新的待聚合字段加入第一步的筛选列表中
  • 在agg()的参数里新增对应配置即可,比如要新增统计每个分组的订单量字段OrderCount,只需要加一行OrderCount = ('Order', 'count')(命名聚合写法),或者在字典里加'Order': 'count'再补充重命名规则即可。

另外注意原来代码里用apply(sum)的写法性能远低于pandas内置的sum聚合,推荐直接使用内置聚合函数,处理大数据量时差异会非常明显。


内容的提问来源于stack exchange,提问作者Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:01