首页 > 解决方案 > 根据条件设置熊猫数据框的值

问题描述

我找不到此查询的类似问题。但是,我有一个 pandas 数据框,我想在其中使用两列来设置条件,如果它为真,请替换其中一列中的值。

例如。我的一列是“项目名称”,另一列是“价值”。'itemname' 可能会重复很多次。我想检查每个“项目名称”,如果所有其他同名项目的值为 0,则将这些“值”替换为 100。

我知道这应该很简单,但是我无法理解它。

只是为了更清楚,在这里

    itemname value
0      a       0
1      b       100
2      c       0
3      a       0
3      b       75
3      c       90

我希望我的声明将此数据框更改为

    itemname value
0      a       100
1      b       100
2      c       0
3      a       100
3      b       75
3      c       90

希望这是有道理的。我检查是否有人问过类似的问题,但在这种情况下找不到东西。

标签: pythonpandaspandas-groupby

解决方案


您可以使用GroupBy+transform来创建蒙版。pd.DataFrame.loc然后通过和布尔索引分配:

mask = df.groupby('itemname')['value'].transform(lambda x: x.eq(0).all())
df.loc[mask.astype(bool), 'value'] = 100

print(df)

  itemname  value
0        a    100
1        b    100
2        c      0
3        a    100
3        b     75
3        c     90

推荐阅读