Pandas分组计算归一化价格回写DataFrame仅最后组生效如何修复
问题原因
你代码的核心问题是每次循环直接对整个Price_Norm列赋值,normalized_price仅包含当前分组的索引对应的值,其他索引位置没有匹配项,会被自动填充为NaN,因此每次循环都会覆盖上一轮的计算结果,最终只剩下最后一个分组(也就是Dog)的计算结果留存。
修复方案
方案1:修改原有循环的赋值逻辑
只给当前商品对应的行赋值,不要覆盖全列,把你标注的问题行替换为:
data.loc[data['itemName'] == this_item, 'Price_Norm'] = normalized_price
方案2:更简洁的pandas原生写法(推荐)
不需要手动写循环遍历分组,直接用groupby+transform即可完成分组计算并自动匹配索引回写:
import pandas as pd d = { 'itemName': ['Cat', 'Cat', 'Dog', 'Dog'], 'Price': [1, 2, 3, 4], 'Price_Norm':[0,0,0,0], } data = pd.DataFrame(data=d) # 分组计算归一化值并回写 data['Price_Norm'] = data.groupby('itemName')['Price'].transform(lambda x: x - x.max())
运行后最终的data结果如下:
| itemName | Price | Price_Norm |
|---|---|---|
| Cat | 1 | -1 |
| Cat | 2 | 0 |
| Dog | 3 | -1 |
| Dog | 4 | 0 |
内容的提问来源于stack exchange,提问作者jojokids
相关产品推荐
相关产品推荐

