pandas: データ フレームのインデックス作成中に複数の条件で予期しない動作が発生する
DataFrame 内の行を複数の列の値でフィルター処理する場合、次のことが重要です。 AND (&) および OR (|) 演算子の動作を理解します。
最近の観察では、これらの演算子の動作が逆になっているように見えることがわかりました。 OR 演算子は AND 演算子のように動作するようであり、その逆も同様です。
説明のために、次のデータフレームを考えてみましょう:
<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) }) # Insert -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 (|)']))</code>
結果は次のようになります:
<code class="python"> 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]</code>
出力に見られるように、AND 演算子は少なくとも 1 つの値が -1 である行を削除しますが、OR 演算子は両方の値が -1 ではない行を保持します。
この動作は直観に反しているように見えるかもしれませんが、ドロップではなく、保持したい行の条件を指定していることを思い出してください。
したがって、観察された動作は正しいです。
以上が複数の条件でデータフレームにインデックスを付けると、パンダの AND (&) 演算子と OR (|) 演算子が逆に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。