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

如何按客户分组后将同一DataFrame中数量和单价对应的数值相乘

实现方法

你的原代码不符合pandas的语法规范,groupby对象无法直接通过指定category取值的方式提取对应列数值计算,可通过以下两种方式实现需求:

方法1:透视表转宽表后计算(逻辑最直观)

先将长格式的df转为宽格式,把category的取值转为列,对应值取Number列的内容,之后直接做列乘法即可:

# 透视转换,index可根据实际需要保留的公共维度调整
df_pivot = df.pivot(
    index=['customer name', 'sales rep', 'sku', 'date'],
    columns='category',
    values='Number'
).reset_index()
# 计算总价格
df_pivot['total_price'] = df_pivot['quantity'] * df_pivot['unit price']
# 若只需统计每个客户的总价格(同客户多订单可叠加)
result = df_pivot.groupby('customer name')['total_price'].sum().reset_index()

方法2:groupby后自定义聚合函数计算

无需转换表结构,直接在分组后自定义计算逻辑:

def cal_total(group):
    quantity = group[group['category']=='quantity']['Number'].sum()
    unit_price = group[group['category']=='unit price']['Number'].sum()
    return quantity * unit_price

# 按客户+sku+日期分组,避免同客户多订单计算混淆,仅按客户分组可去掉后面的维度
result = df.groupby(['customer name', 'sku', 'date']).apply(cal_total).reset_index(name='total_price')

两种方法得到的示例计算结果如下:

customer nametotal_price
Mueller and Sons5700
Purdy and Sons32000

和你举例的计算逻辑结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:09:02