Pandas如何对每个id分组首行的price列值减去对应less列值
Pandas 分组修改首行数据解决方案
核心思路是通过groupby.cumcount()标记每个id分组的首行,仅对标记出的行执行price减less的操作,其余行数据保持不变:
完整实现代码
import pandas as pd # 1. 构造示例DataFrame df = pd.DataFrame({ "id": ["a", "a", "a", "b", "b", "b"], "items": ["Fruits"] * 6, "price": [120, 220, 320, 120, 280, 320], "less": [20, 20, 20, 50, 20, 20] }) # 2. 仅修改每个id分组首行的price值 df.loc[df.groupby("id").cumcount() == 0, "price"] = df["price"] - df["less"] # 3. 移除不需要的less列,得到最终结果 df = df.drop(columns="less")
输出结果
| id | items | price |
|---|---|---|
| a | Fruits | 100 |
| a | Fruits | 220 |
| a | Fruits | 320 |
| b | Fruits | 70 |
| b | Fruits | 280 |
| b | Fruits | 320 |
逻辑说明
df.groupby("id").cumcount()会为每个id分组内的行按原始顺序生成从0开始的自增序号,序号为0的就是每个分组的首行,用loc定位到这些行的price列做减法,不会影响其他行的数值。
内容的提问来源于stack exchange,提问作者naina。
相关产品推荐
相关产品推荐

