0

pandas データフレームqueryメソッドの予期しない動作に頭を悩ませようとしています。

テストデータフレームを想定:

>>> df = pd.DataFrame([[1,1,1,2,2,2],[1,2,3,4,5,6]], columns=['a', 'b', 'c', 'd', 'e', 'f'])
>>> df
   a  b  c  d  e  f
0  1  1  1  2  2  2
1  1  2  3  4  5  6

次のクエリ式で最初の行を選択できます。

>>> df.query('a == b == c == 1 & d == e == f == 2')
   a  b  c  d  e  f
0  1  1  1  2  2  2

ただし、私の目的は、上記の式を満たす行を除くすべての行を選択することです。直感的には、式全体を括弧で囲み、前に論理式を追加するだけで機能するはずnotです。- 右?

>> df.query('~(a == b == c == 1 & d == e == f == 2)')
   a  b  c  d  e  f
0  1  1  1  2  2  2
1  1  2  3  4  5  6

期待した結果ではないことは明らかです。しかしnot、少し代数を使って を式に書き込めば、すべてうまくいきます。

>>> df.query('~(a == b == c == 1) | ~(d == e == f == 2)')
   a  b  c  d  e  f
1  1  2  3  4  5  6

ここで何が起こっているのか、誰か説明してもらえますか? 明らかに、最後の 2 つのクエリ文字列は論理的に同一ですが、それでも異なる結果を返します。

4

0 に答える 0