Pandas如何按state和store分组求和sales后乘rate生成new_sales新列
解决方法
你需要用transform代替apply处理分组聚合结果,transform会自动把分组求和的结果广播回原数据对应的每行,直接和当前行的rate相乘即可得到目标列:
import pandas as pd # 构造示例数据 data = [['california', 'a', 11, 0.6], ['california', 'a', 12, 0.4], ['california', 'b', 32, 0.7]] df= pd.DataFrame(data, columns=['state','store','sales','rate']) # 新增new_sales列的正确代码 df['new_sales'] = df.groupby(['state','store'])['sales'].transform('sum') * df['rate']
运行后结果
| state | store | sales | rate | new_sales |
|---|---|---|---|---|
| california | a | 11 | 0.6 | 13.8 |
| california | a | 12 | 0.4 | 9.2 |
| california | b | 32 | 0.7 | 22.4 |
原代码问题说明
你之前使用apply的写法,分组求和后直接和全表rate列相乘,会出现索引和维度匹配错误,无法正确对应到每行赋值。
内容的提问来源于stack exchange,提问作者alberto
相关产品推荐
相关产品推荐

