如何根据其他列中的多个条件更新列数据?

时间:2018-10-02 18:16:14

标签: python pandas

我有一个数据框:

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,但出现一条错误消息,指出“索引器太多”

3 个答案:

答案 0 :(得分:1)

这将起作用

df.loc[(df.Color=='Blue')&(df.Age==28)&(df.City=='Atl'),'Value']=1
df
Out[687]: 
   Color Name  Age City  Value
0   Blue  Bob   28  Atl      1
1  Green  Bob   27  Chi      0
2   Blue  Sam   28  Atl      1

答案 1 :(得分:1)

对于这些问题,我通常默认使用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)

答案 2 :(得分:0)

您可以将np.where与多个条件语句一起使用。如果您拥有原始数据框,则可以执行以下代码

import numpy as np
df['value'] = np.where((df['Color'] == 'Blue') & (df['Age'] == 28) & (df['City'] == 'Atl'), 1, 0)

屈服

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

很显然,您可以根据需要/需要更改条件,甚至可以使用相同的技术创建其他列。