まずは、2つの条件を「かつ」で組み合わせる方法を学びます。
「条件1、かつ、条件2」は、&
を使って次のように書けます。
(条件1) & (条件2)
Pythonではブール値の「かつ」にandを使いますが、pandasの絞り込みでは&を使うことに注意してください。
()を付けるのは、>=などの比較演算子より、&
のビット演算子の方が優先順位が高いためです。
pandasの条件でビット演算子を使う場合は、比較演算子の方に括弧をつけるようにしましょう。
なお、df[(条件1) and (条件2)]
のように&
の代わりにand
を使ってもValueErrorになります。
※ 前問で学んだ~同様、&もビット演算子です。
Name | Height | Weight | |
---|---|---|---|
0 | 佐藤 | 172 | 53 |
1 | 田中 | 160 | 50 |
2 | 鈴木 | 165 | 58 |
3 | 長谷川 | 160 | 65 |
「Weightが55以上、かつ、Heightが160以下」の行は以下のように取得できます。括弧が必要です。
df[(df.Weight >= 55) & (df.Height <= 160)]
Name | Height | Weight | |
---|---|---|---|
3 | 長谷川 | 160 | 65 |
- 1行目:「
53 >= 55 and 172 <= 160
」は、False - 2行目:「
50 >= 55 and 160 <= 160
」は、False - 3行目:「
58 >= 55 and 165 <= 160
」は、False - 4行目:「
65 >= 55 and 160 <= 160
」は、True
(df.Weight >= 55) & (df.Height <= 160)
は、[False, False, False, True]
をデータとするSeriesになります。
&
を使って更新もできます。
df[(df.Weight >= 55) & (df.Height <= 160)] = [["中川", 161, 67]]
df
Name | Height | Weight | |
---|---|---|---|
0 | 佐藤 | 172 | 53 |
1 | 田中 | 160 | 50 |
2 | 鈴木 | 165 | 58 |
3 | 中川 | 161 | 67 |
4行目が更新されています。
# 複数の条件式を使う場合でも、どちらの書き方も可能
df.loc[(条件1) & (条件2)] # locを使う書き方
df[(条件1) & (条件2)] # locを使わない書き方
コメント