【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 |