条件1または条件2

「条件1、または、条件2」は、|を使って次のように書けます。

(条件1) | (条件2)

Pythonではブール値の「または」にorを使いますが、pandasの絞り込みでは|を使うことに注意してください。

※ &や~同様、|もビット演算子です。

|による「または」の処理は、行単位でorで判断されます。

NameHeightWeight
0佐藤17253
1田中16050
2鈴木16558
3長谷川16065

「Weightが60以上、または、Heightが170以上」の行は以下のように取得できます。括弧が必要です。

df[(df.Weight >= 60) | (df.Height >= 170)]
NameHeightWeight
0佐藤17253
3長谷川16065

同じ書き方で、更新もできます。

df[(df.Weight >= 60) | (df.Height >= 170)] = [["山田", 173, 55], ["中川", 161, 67]]
df
NameHeightWeight
0山田17355
1田中16050
2鈴木16558
3中川16167

条件の数は、3つ以上でも組み合わせて使えます。たとえば、下記のように書けます。

cond1 = df.Name == "山田"
cond2 = df.Height <= 160
cond3 = df.Weight >= 67
# Nameが"山田"、または、Heightが160以下、または、Weightが67以上
df[cond1 | cond2 | cond3]

ビット演算子のまとめ

ここまでに学んだ~&|を含めて、pandasの条件で使えるビット演算子を下記にまとめます。

ビット演算子対応する論理演算要素ごとの計算時の演算
&論理積条件1 and 条件2
|論理和条件1 or 条件2
~否定not 条件1
^排他的論理和(条件1) != (条件2)

排他的論理和は「2つの条件がTrueとFalse」のときに成り立ちます。具体的に確認してみましょう。

  • 条件1をdf.Height > 163とします。
  • 条件2をdf.Weight < 57とします。

この2つの条件の組み合わせを写経で使ったデータに当てはめると以下のようになります。「2つの条件がTrueとFalse」になるものを太字にしています。

条件2がTrue条件2がFalse
条件1がTrue山田鈴木
条件1がFalse田中中川

条件1と条件2の排他的論理和は下記のように記述し、条件1と条件2の結果が異なる2人になります。

df[(df.Height > 163) ^ (df.Weight < 57)]
NameHeightWeight
1田中16050
2鈴木16558

コメント

タイトルとURLをコピーしました