pandasでは、特定の条件でDataFrameの行を絞り込めます。
仕組みは以下のようになります。
- 列と比較演算子を使って、特定の条件から「比較結果」を作成する
DataFrame.loc[比較結果]
を使って、「比較結果」がTrueになる行を取得する
具体例で確認しましょう。locは条件によって抽出する方法
Name | Age | |
---|---|---|
0 | Alice | 17 |
1 | Bob | 24 |
2 | Carol | 29 |
「Ageが20以上の行」は以下のように取得できます。sr
が、比較結果を表すSeriesです。
sr = df.Age >= 20 # 比較結果
df.loc[sr] # srの要素がTrueの行を抜き出す
Name | Age | |
---|---|---|
1 | Bob | 24 |
2 | Carol | 29 |
このとき、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になる行のみを取り出す式という事
演習
import pandas as pd
df = pd.DataFrame(
[["Alice", 17], ["Bob", 24], ["Carol", 29]],
columns=["Name", "Age"],
)
df
Name | Age | |
---|---|---|
0 | Alice | 17 |
1 | Bob | 24 |
2 | Carol | 29 |
「Ageが20以上」という比較結果をsr
に代入します。
sr = df.Age >= 20
loc
を使って、sr
がTrueの行を抜き出します。Ageが20以上である2行目と3行目だけが取得されます。
df_age20 = df.loc[sr]
df_age20
Name | Age | |
---|---|---|
1 | Bob | 24 |
2 | Carol | 29 |
sr
の要素はブール値であり、「各行のAgeが20以上かどうか」を意味します。
sr
0 False
1 True
2 True
Name: Age, dtype: bool
普通にやると抽出しない
df["df_age20"]=df["Age"]>=20
df
Name | Age | df_age20 | |
---|---|---|---|
0 | Alice | 17 | False |
1 | Bob | 24 | True |
2 | Carol | 29 | True |
- このステップをまとめて、
df.loc[条件式]
のようにも記述できます。
コメント