如何用Pandas将同品牌行价格统一为该品牌最后一行的价格
当然可以用Pandas实现这个需求!
这是个很常见的数据规整场景,用Pandas的groupby配合transform方法就能完美解决,而且能完全保留所有原始行,不需要做分组聚合后再合并的繁琐操作。
步骤详解:
首先我们先还原你的示例数据集方便测试:
import pandas as pd data = { 'Brand': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B'], 'Price': [10, 20, 30, 40, 60, 15, 25, 35], 'Color': ['Blue', 'Red', 'Green', 'Yellow', 'Black', 'Blue', 'Red', 'Black'], 'Category': ['Shoes']*5 + ['Bags']*3 } df = pd.DataFrame(data)
接下来就是核心操作:
# 按Brand分组,提取每个品牌最后一行的Price,再广播到该品牌的所有行 df['Price'] = df.groupby('Brand')['Price'].transform('last')
处理后结果:
运行后你的数据集会变成这样:
| Brand | Price | Color | Category | |
|---|---|---|---|---|
| 0 | A | 60 | Blue | Shoes |
| 1 | A | 60 | Red | Shoes |
| 2 | A | 60 | Green | Shoes |
| 3 | A | 60 | Yellow | Shoes |
| 4 | A | 60 | Black | Shoes |
| 5 | B | 35 | Blue | Bags |
| 6 | B | 35 | Red | Bags |
| 7 | B | 35 | Black | Bags |
方法原理:
groupby('Brand')会把数据按品牌拆分成一个个独立子组transform('last')会对每个子组的Price列取最后一个值,然后将这个值自动填充到该子组的每一行,最终生成一个和原DataFrame长度完全匹配的Series- 直接赋值给原
Price列,就完成了所有行的Price替换,同时完整保留了原始行的其他字段
这个方法高效又简洁,不管你有多少个品牌都能自动适配~
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

