グループに分ける

「グループごとに何かを計算したい」 場面では、pandas.groupby() が使えます。

df.groupby(列名).処理のように書くことで、指定した列の値でグループ分けして処理を行います。たとえば、df.groupby("カテゴリ").mean() は「DataFrame型のオブジェクトdfを、列カテゴリの値ごとにグループ分けして平均値をとる」処理をします。

https://images.pyq.jp/repo/prod/pandas_start_02_groupby/groupby_simple.jpg

演習

import pandas as pd

# データの読み込み
df = pd.read_csv("dataset/physical_measurement_clean.csv")
df
NameHeightWeightClub
0佐藤17253野球部
1田中16050合唱部
2鈴木16558美術部
3高橋17059美術部
4伊藤16654サッカー部
5山本15651所属なし
6渡辺16358所属なし

さっそく部活ごとの身長と体重の平均値を計算してみましょう。 df.groupby(列名).処理 のように書くことで、指定した列の値でグループ分けして処理を行います。今回は平均値を出したいため、処理の部分にはmean()を使いましょう。

下記のコードを実行すると、部活ごとの身長・体重の平均値がDataFrame型のオブジェクトで得られます。なお、文字列が格納されている列Nameは平均値を計算できないため、自動的に無視されます。

# 列Clubのグループごとに、各列の平均値を計算
mean_df= df.groupby("Club").mean()
mean_df
HeightWeight
Club
サッカー部166.054.0
合唱部160.050.0
所属なし159.554.5
美術部167.558.5
野球部172.053.0

次に、部活ごとの最大値を確認してみましょう。mean()の代わりにmax()を適用すると、各列の最大値が得られます。

# 列Clubのグループごとに、各列の最大値を計算
max_df = df.groupby("Club").max()
max_df

Out[3]:

NameHeightWeight
Club
サッカー部伊藤16654
合唱部田中16050
所属なし渡辺16358
美術部高橋17059
野球部佐藤17253

コメント

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