Pandas, Python

【Pandas】groupbyを用いてグループごとに合計、平均、最大、最小などの統計量を算出する


データ分析を行う際、任意のグループごとに平均などの統計量を算出することがよくあります。

本記事では、Pythonのデータ分析用ライブラリであるPandasを用いて、前述の操作を行う方法について解説します。

使用するメソッドと実装例

グループごとの統計量を算出する処理に必要なメソッド、その使い方を紹介します。

使用するメソッド

使用するメソッドは、Pandasのgroupbyメソッドと計算用メソッド(後述)です。

対象のDataFrameに対して以下のようにメソッドを適用することにより、出力結果として指定の列におけるグループ別の統計量が得られます。

DataFrame.groupby('任意の列名①')['任意の列名②'].メソッド()
…
# 列名①:グループ分けの対象となる列
# 列名②:統計量算出の対象となる列

実装例

前述のやり方に従って処理を実装してみます。

import pandas as pd

df = pd.DataFrame([['A', 'Male', 15], ['B', 'Female', 16], 
                   ['C', 'Male', 17], ['D', 'Female', 18]],
                   columns=['name', 'sex', 'age'], index=[101, 102, 103, 104])

print('元のDataFrame')
print(df)

temp = pd.DataFrame()
temp['sum'] = df.groupby('sex')['age'].sum()  # 合計値
temp['max'] = df.groupby('sex')['age'].max()  # 最大値
temp['min'] = df.groupby('sex')['age'].min()  # 最小値
temp['ave'] = df.groupby('sex')['age'].mean() # 平均値
temp['median'] = df.groupby('sex')['age'].median() # 中央値

print('\nsexのグループ別統計量')
print(temp)

このプログラムを実行すると以下の出力結果が得られます。

元のDataFrame
    name     sex  age
101    A    Male   15
102    B  Female   16
103    C    Male   17
104    D  Female   18

sexのグループ別統計量
        sum  max  min   ave  median
sex                                
Female   34   18   16  17.0    17.0
Male     32   17   15  16.0    16.0