データアナリストのメモ帳

データアナリストのメモ帳

IT企業で働くデータアナリストのブログ

【Python】pandasのgroupbyで複数の統計量(平均、中央値など)を同時に取る

pandasでgroupbyを使って集計をする際に、この量に関しては平均を、また別の量については中央値を取りたい場合などに使える方法です。
まず、DataFrameを定義します。
男女の身長と体重が記録されているとしましょう。

import pandas as pd

sample_df = pd.DataFrame({
    
    "gender": ["F", "F", "F", "M", "M", "M"],
    "height": [158, 162, 155, 175, 163, 178],
    "weight": [45, 50, 40, 72, 66, 80]
})

ここで、性別によってgroupbyして身長と体重の平均をとりたい場合は以下のようになります。

sample_df.groupby(['gender'])[["height", "weight"]].mean()

結果はこんな感じです。

height weight
gender
F 158.333333 45.000000
M 172.000000 72.666667

これを例えば、身長については中央値を体重については平均を取りたい場合は、次のように書けば良いです。

sample_df.groupby(['gender']).agg({"height": "median", "weight": "mean"})

結果は以下の通り。

height weight
gender
F 158.0 45.000000
M 175.0 72.666667