Pandas布尔运算

时间:2016-11-02 16:36:35

标签: python pandas

我的数据框如下:

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')

但它不起作用。

1 个答案:

答案 0 :(得分:2)

您正在寻找的代替/的是|。但我通常不会建议使用按位运算符作为条件。当操作数评估为TrueFalse时,它们会起作用,但当条件说明整数或需要短路时会产生错误的结果。

另一方面,&|的优先级高于==的优先级,因此表达式不会达到您的实际预期,例如:

df['check']=='age' & df['result']=='true'

评估为:

df['check']== ('age' & df['result']) =='true' 

您可以将括号中的运算符包装起来以更改评估顺序:

(df['check']== 'age') & (df['result']) =='true')

更新 @kennytm

在这种情况下,您不需要andor只需恰当地使用parens。