2つの列の値でデータフレームの行をフィルタリングしています。
何らかの理由で、OR演算子は、AND演算子の動作と同じように動作し、逆も同様です。
私のテストコード:
import pandas as pd
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つの値が等しいすべての行を削除します-1
。一方、OR
オペレーターは、両方の値が等しいこと-1
を要求してそれらをドロップします。私は正反対の結果を期待します。誰かがこの動作を説明できますか?
私はパンダ0.13.1を使用しています。
df.query
そしてpd.eval
、このユースケースのために良いフィットのように見えます。pd.eval()
関数のファミリー、その機能、および使用例については、pd.eval()を使用したパンダでの動的式評価をご覧ください。