pandas: 複数の条件でデータ フレームをフィルタリングする
pandas では、複数の列の値でデータ フレームをフィルタリングするのは難しい場合があります。 AND 演算子 (&) を使用する場合、OR 演算子 (|) のように動作することを期待するかもしれませんし、その逆も同様です。
次のテスト コードを考えてみましょう。
<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) }) 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 (|)',]))</code>
予期しないもの結果では動作が発生します:
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 である行のみを削除します。この動作は予想とは逆です。
この動作の理由は、これらの演算子の使用方法にあります。 AND 条件では、両方の条件が true である行を保持するように指定しています。これは、少なくとも 1 つの条件が false である行を削除することと同じです。対照的に、OR 条件は、どちらかの条件が true である行を保持することを指定します。これは、両方の条件が false である行を削除するのと同じです。
明確さを確保し、混乱を避けるために、条件には明示的な表記を使用することをお勧めします。複数の列が関係する。複数の条件を演算子で連結する代わりに、括弧を使用して条件をグループ化し、それらの論理関係を明示します。
たとえば、次のコードは AND 条件を明示的に指定します。
<code class="python">df1 = df[(df.a != -1) & (df.b != -1)]</code>
一方、次のコードは AND 条件を明示的に指定します。コードは OR 条件を明示的に指定します:
<code class="python">df2 = df[(df.a != -1) | (df.b != -1)]</code>
明示的な表記法を使用すると、条件が意図したとおりに解釈され、予期しない動作を防ぐことができます。
以上が複数の条件でデータ フレームをフィルター処理するときに、パンダの AND 演算子 (&) が OR 演算子 (|) のように動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。