「条件1、または、条件2」は、|
を使って次のように書けます。
(条件1) | (条件2)
Pythonではブール値の「または」にorを使いますが、pandasの絞り込みでは|を使うことに注意してください。
※ &や~同様、|もビット演算子です。
|による「または」の処理は、行単位でorで判断されます。
Name | Height | Weight | |
---|---|---|---|
0 | 佐藤 | 172 | 53 |
1 | 田中 | 160 | 50 |
2 | 鈴木 | 165 | 58 |
3 | 長谷川 | 160 | 65 |
「Weightが60以上、または、Heightが170以上」の行は以下のように取得できます。括弧が必要です。
df[(df.Weight >= 60) | (df.Height >= 170)]
Name | Height | Weight | |
---|---|---|---|
0 | 佐藤 | 172 | 53 |
3 | 長谷川 | 160 | 65 |
同じ書き方で、更新もできます。
df[(df.Weight >= 60) | (df.Height >= 170)] = [["山田", 173, 55], ["中川", 161, 67]]
df
Name | Height | Weight | |
---|---|---|---|
0 | 山田 | 173 | 55 |
1 | 田中 | 160 | 50 |
2 | 鈴木 | 165 | 58 |
3 | 中川 | 161 | 67 |
条件の数は、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)]
Name | Height | Weight | |
---|---|---|---|
1 | 田中 | 160 | 50 |
2 | 鈴木 | 165 | 58 |
コメント