如何在Pandas中按Base SKU分组并新增汇总列,同时保留原列?
解决方案
你需要用groupby.transform()方法来实现——它会对每个分组计算聚合值,然后把结果广播到该分组的每一行,这样就能保留原DataFrame的所有行和列,同时新增汇总列。
具体代码
假设你的原始DataFrame是df,执行以下代码:
# 按Base SKU分组,计算每组Price和MRP的总和,广播到每行 df['Combined Price'] = df.groupby('Base SKU')['Price'].transform('sum') df['Combined MRP'] = df.groupby('Base SKU')['MRP'].transform('sum')
示例验证
比如你的原始数据是:
| Base SKU | Price | MRP | Title | url | Prod Sku |
|---|---|---|---|---|---|
| SKU001 | 10 | 15 | 商品A | url1 | SKU001-1 |
| SKU001 | 20 | 25 | 商品A | url2 | SKU001-2 |
执行代码后会得到:
| Base SKU | Price | MRP | Title | url | Prod Sku | Combined Price | Combined MRP |
|---|---|---|---|---|---|---|---|
| SKU001 | 10 | 15 | 商品A | url1 | SKU001-1 | 30 | 40 |
| SKU001 | 20 | 25 | 商品A | url2 | SKU001-2 | 30 | 40 |
为什么之前的方法不行
- 第一种方法用
agg()+reset_index(),只会返回分组后的聚合结果行,丢失了原数据的细节行 - 第二种方法在
agg()里对其他列取first,本质还是按分组聚合为一行,所以最终只剩一行
内容的提问来源于stack exchange,提问作者Gururaj B R
相关产品推荐
相关产品推荐

