如何使用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 Type | weighted_profit |
|---|---|
| MacBook Pro | 123.0 |
| Macbook Air | 131.0 |
| Dell Inspiron | 187.5 |
| HP | 106.5 |
和你给出的MacBook Pro的计算示例完全匹配。
内容的提问来源于stack exchange,提问作者The_Bandit
相关产品推荐
相关产品推荐

