有没有办法使用np.where()和列列表?

时间:2019-01-24 16:51:58

标签: python pandas numpy

我尝试使用np.where()函数创建新变量

myDF['newVar'] = np.where((myDF['var1']==1) |
                           (myDF['var2']==1) |
                           (myDF['var3']==1) ,
                           1, 0)

是否有一种方法可以用这样的列表替换var1,var2,var3(每列的条件相同== 1):

listVars=['var1', 'var2', 'var3']
myDF['newVar'] = np.where((myDF[listVars]==1),
                           1, 0)

1 个答案:

答案 0 :(得分:1)

您可以将pandas.DataFrame.any()axis=1一起使用:

listVars=['var1', 'var2', 'var3']
myDF['newVar'] = np.where((myDF[listVars]==1).any(axis=1), 1, 0)

例如:

myDF = pd.DataFrame({
    "var1": [1, 1, 1, 0, 0],
    "var2": [1, 0, 1, 0, 1],
    "var3": [0, 0, 0, 0, 0]
})

listVars=['var1', 'var2', 'var3']
myDF['newVar'] = np.where((myDF[listVars]==1).any(1),1, 0)

print(myDF)
#   var1  var2  var3  newVar
#0     1     1     0       1
#1     1     0     0       1
#2     1     1     0       1
#3     0     0     0       0
#4     0     1     0       1