我通过两列的值过滤数据帧中的行。
出于某种原因,OR操作符的行为和我期望的AND操作符的行为一样,反之亦然。
我的测试代码:
df = pd.DataFrame({'a': range(5), 'b': range(5) })
# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print(pd.concat([df, df1, df2], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',]))
结果是:
original df using AND (&) using OR (|)
a b a b a b
0 0 0 0 0 0 0
1 -1 -1 NaN NaN NaN NaN
2 2 2 2 2 2 2
3 -1 3 NaN NaN -1 3
4 4 -1 NaN NaN 4 -1
[5 rows x 6 columns]
可以看到,AND操作符删除了其中至少有一个值等于-1的每一行。另一方面,OR运算符要求两个值都等于-1才能删除它们。我认为结果完全相反。有人能解释一下这种行为吗?
我使用的是熊猫0.13.1。