我的数据框如下:
ref check result
1 age true
1 gender false
1 address false
1 nationality true
如果满足以下条件,我正在尝试创建1和0的新列。
if age == 'true' & (gender == 'false' or address == 'false') & nationality == 'true', then 1 else 0.
这是我的代码
df['test']= ((df['check']=='age' & df['result']=='true') & ((df['check']=='gender' / df['check']=='address') & df['result']=='false') & (df['check']=='nationality' & df['result']=='true')).astype('int')
但它不起作用。
答案 0 :(得分:2)
您正在寻找的代替/
的是|
。但我通常不会建议使用按位运算符作为条件。当操作数评估为True
和False
时,它们会起作用,但当条件说明整数或需要短路时会产生错误的结果。
另一方面,&
和|
的优先级高于==
的优先级,因此表达式不会达到您的实际预期,例如:
df['check']=='age' & df['result']=='true'
评估为:
df['check']== ('age' & df['result']) =='true'
您可以将括号中的运算符包装起来以更改评估顺序:
(df['check']== 'age') & (df['result']) =='true')
更新 @kennytm
在这种情况下,您不需要and
或or
只需恰当地使用parens。