条件による絞り込み

pandasでは、特定の条件でDataFrameの行を絞り込めます。
仕組みは以下のようになります。

  1. 列と比較演算子を使って、特定の条件から「比較結果」を作成する
  2. DataFrame.loc[比較結果]を使って、「比較結果」がTrueになる行を取得する

具体例で確認しましょう。locは条件によって抽出する方法

NameAge
0Alice17
1Bob24
2Carol29

「Ageが20以上の行」は以下のように取得できます。srが、比較結果を表すSeriesです。

sr = df.Age >= 20  # 比較結果
df.loc[sr]  # srの要素がTrueの行を抜き出す
NameAge
1Bob24
2Carol29

このとき、srの要素はTrue/Falseのブール値になっています。

sr
0    False
1     True
2     True
Name: Age, dtype: bool

srの要素数はdfの行数と同じです。各要素が各行に対応します。
「Ageが20以上の行」は2行目と3行目なので、srのデータはFalse, True, Trueです。

つまり、df.loc[]はTrueになる行のみを取り出す式という事

https://images.pyq.jp/repo/prod/pandas_cond_loc_v2/pandas_cond_01.jpg

演習

import pandas as pd

df = pd.DataFrame(
    [["Alice", 17], ["Bob", 24], ["Carol", 29]],
    columns=["Name", "Age"],
)
df
NameAge
0Alice17
1Bob24
2Carol29

「Ageが20以上」という比較結果をsrに代入します。

sr = df.Age >= 20

locを使って、srがTrueの行を抜き出します。Ageが20以上である2行目と3行目だけが取得されます。

df_age20 = df.loc[sr]
df_age20
NameAge
1Bob24
2Carol29

srの要素はブール値であり、「各行のAgeが20以上かどうか」を意味します。

sr
0    False
1     True
2     True
Name: Age, dtype: bool

普通にやると抽出しない

df["df_age20"]=df["Age"]>=20
df
NameAgedf_age20
0Alice17False
1Bob24True
2Carol29True
  • このステップをまとめて、df.loc[条件式]のようにも記述できます。

コメント

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