首页 > 解决方案 > 每个 id pandas 第一行的条件在哪里

问题描述

我有一个df:

id     items    price    less
 a    Fruits     120      20
 a    Fruits     220      20
 a    Fruits     320      20
 b    Fruits     120      50
 b    Fruits     280      20
 b    Fruits     320      20

我想通过减去较少的列值来操纵每个 id 的第一行的 price 列的值,例如

id    items    price 
 a   Fruits     100    #120-20(less value)
 a   Fruits     220 
 a   Fruits     320 
 b   Fruits     70     #120-50
 b   Fruits     280 
 b   Fruits     320 

它应该只用于每个 id 的第一行。

标签: pythonpandasdataframepandas-groupby

解决方案


您可以使用duplicatedoverid列(默认情况下,将第一个标记为不重复)并np.where选择要执行的操作:

df["new_price"] = np.where(df.duplicated("id"), df.price, df.price - df.less)

要得到

>>> df

  id   items  price  less  new_price
0  a  Fruits    120    20        100
1  a  Fruits    220    20        220
2  a  Fruits    320    20        320
3  b  Fruits    120    50         70
4  b  Fruits    280    20        280
5  b  Fruits    320    20        320

推荐阅读