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

如何在Pandas分组聚合时直接计算Quantity*Price的平均值?

分组聚合优化方案

先看原始数据:

import pandas as pd

df = pd.DataFrame({'Quantity': [2, 3, 4, 1, 2, 1, 4, 5],
                   'User': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
                   'Price': [5, 3, 2, 6, 2, 3, 4, 5],
                   'Shop': ['X', 'X', 'X', 'Y', 'Z', 'Z', 'X', 'Y'],
                   'Day': ['M', 'T', 'W', 'W', 'M', 'T', 'M', 'W']
                   })

需求是按Shop和Day分组,同时完成两个统计:

  • 每组的用户数量
  • 分组内Quantity * Price的平均值

不需要新建临时列,直接在一次聚合里搞定的方法有两种:

方法一:使用命名聚合+lambda函数(推荐,性能更高)

利用Pandas的命名聚合功能,直接在agg中指定两个统计项,其中平均消费通过lambda函数实时计算乘积的均值:

result = df.groupby(['Shop', 'Day']).agg(
    用户数量=('User', 'count'),
    平均消费=(['Quantity', 'Price'], lambda x: (x['Quantity'] * x['Price']).mean())
)

方法二:使用groupby.apply

通过apply逐组处理,返回包含两个统计值的Series,最后重置索引让结果更规整:

result = df.groupby(['Shop', 'Day']).apply(
    lambda group: pd.Series({
        '用户数量': group['User'].count(),
        '平均消费': (group['Quantity'] * group['Price']).mean()
    })
).reset_index()

注意:方法一的性能优于方法二,因为agg是向量化操作,适合处理大数据集;apply是逐组遍历,数据量较大时速度会慢一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:27:48