如何将groupby结果应用到DataFrame所有行?按日期、产品ID求售价最大值
解决方案
可以用 pandas 的 groupby 结合 transform 方法实现,这是处理这类需求的高效方式,完全避免循环,适合大数据量场景:
步骤说明
- 按
Date和Product_id分组 - 对分组后的
Sell_price列应用max函数 - 通过
transform将结果映射回原 DataFrame 的每一行,保持原维度不变
代码示例
假设你的 DataFrame 名为 df,执行以下代码即可得到目标结果:
import pandas as pd # 模拟你的数据(可替换为实际数据) data = { 'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-02'], 'Product_id': ['A', 'A', 'B', 'B', 'C'], 'Sell_price': [100, 150, 200, 180, 300] } df = pd.DataFrame(data) # 新增列存储每组的最大售价 df['Max_Sell_price'] = df.groupby(['Date', 'Product_id'])['Sell_price'].transform('max') print(df)
输出结果
| Date | Product_id | Sell_price | Max_Sell_price |
|---|---|---|---|
| 2023-01-01 | A | 100 | 150 |
| 2023-01-01 | A | 150 | 150 |
| 2023-01-02 | B | 200 | 200 |
| 2023-01-02 | B | 180 | 200 |
| 2023-01-02 | C | 300 | 300 |
这个方法的核心是 transform,它会将分组计算后的结果按原数据的索引匹配填充,确保输出维度和原 DataFrame 完全一致,且内部是向量化操作,处理大数据量的性能远优于循环。
内容的提问来源于stack exchange,提问作者Mohammad Isaac Hosseini
相关产品推荐
相关产品推荐

