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

如何使用Pandas计算各售出商品的加权总利润以筛选最高盈利商品

问题根源

你原有代码的核心错误有两点:

  • 调用df.groupby('Item Type').apply(...)时,传入自定义函数的df已经是单个商品的子数据集,在函数内部再次做groupby逻辑完全错误,也无法拿到全局总销量的统计值
  • 函数内部的groupby参数、sum方法调用的参数用法不符合Pandas规范,无法得到正确的单商品总利润统计值

实现方案

你不需要自定义函数,也不需要遍历商品类型,直接用Pandas分组聚合即可实现需求:

分步实现(可读性更高)

# 计算全局总销量
total_sold = len(df)

# 按商品分组统计单商品总利润、销量
item_stats = df.groupby('Item Type').agg(
    total_profit=('Profit', 'sum'),
    sold_count=('Profit', 'count')
).reset_index()

# 计算加权利润
item_stats['weighted_profit'] = item_stats['total_profit'] * (item_stats['sold_count'] / total_sold)

# 最终只保留需要的两列
result = item_stats[['Item Type', 'weighted_profit']]

简洁单行实现

result = df.groupby('Item Type')['Profit'].sum() * (df.groupby('Item Type').size() / len(df))

该写法返回的结果索引为Item Type,值为对应商品的加权利润,符合你的预期输出格式。

结果验证

针对你给出的示例输入,计算结果如下:

Item Typeweighted_profit
MacBook Pro123.0
Macbook Air131.0
Dell Inspiron187.5
HP106.5

和你给出的MacBook Pro的计算示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:09:02