首页 > 解决方案 > 如何根据其他列中的多个条件更新列数据?

问题描述

我有一个数据框:

Color   Name    Age   City   Value
Blue    Bob     28    Atl    0
Green   Bob     27    Chi    0
Blue    Sam     28    Atl    0

我有上述 DF,如果颜色为蓝色、年龄为 28 岁且城市为 Atl,我希望所有值都等于 1。

我尝试使用 df.loc,但出现“索引器太多”的错误

标签: pythonpandas

解决方案


对于这些问题,我通常默认为np.select,这样我可以创建复杂的条件,并以清晰和可扩展的方式设置输出。

首先,创建您的条件(根据需要创建尽可能多的条件):

p1 = df.Color.eq('Blue')
p2 = df.Age.eq(28)
p3 = df.City.eq('Atl')

condition = p1 & p2 & p3

现在使用numpy.select,传递您的条件列表、匹配输出列表和默认值:

df.assign(Value=np.select([condition], [1], df.Value))

   Color Name  Age City  Value
0   Blue  Bob   28  Atl      1
1  Green  Bob   27  Chi      0
2   Blue  Sam   28  Atl      1

如果你真的只有一个条件,你也可以numpy.where在这里使用:

np.where(condition, 1, df.Value)
# array([1, 0, 1], dtype=int64)

推荐阅读