Python グループ別データ集計「pandasのgroupby×agg」

 本記事では、pandasデータフレームに対して、所望のグループ毎に統計量を計算する雛形コードを載せました。これは、groupbyのaggメソッドを用いることで簡単にできます。groupby は、データを特定の基準でグループ化するために使用されます。agg メソッドは、グループごとに異なる集計関数を適用するために使用されます。

 例えば、下図左のような店の売上データから、年度と製品をグループとした場合の基本統計量を集計したのが下図右です。

 下図は、上右図のように作成したpandasデータフレームをcsvファイルに出力した例です。左図はマルチヘッダーの場合で、人間が読むには見やすいかと思います。しかし、汎用性の観点で扱えるアプリは限定的かもしれません。一方、右図はシングルヘッダーの場合で人間には読みにくいです。しかし、汎用性の観点で大抵のアプリで読み込み可能な書式です。本プログラムにて両者を出力するコードを記述をしています。

■本プログラム

import pandas as pd

df = pd.read_csv('sample_data.csv', encoding='cp932')
print(df)

# 売上列を追加
df['売上'] = df['価格'] * df['販売数']
print(df)

# 商品カテゴリごとにグループ化し、各カテゴリの合計売上、平均価格、最高価格、最低価格を計算
result = df.groupby(['年度','製品']).agg({
    '販売数': 'sum',
    '価格': ['mean', 'max', 'min'],
    '売上': 'sum',
})
print(result)

# CSVファイルへの保存(マルチヘッダーを含む)
result.to_csv('result_data_multi_header.csv', header=True, encoding='cp932')

# CSVファイルへの保存(シングルヘッダーの場合)
# 列名を変更
result.columns = ['販売数_合計', '価格_平均', '価格_最大', '価格_最小', '売上_合計']
result.to_csv('result_data_single_header.csv', encoding='cp932')

以上

参考までに、groupbyを用いたその他の便利な方法もリンクを貼って置きます。
Python カテゴリ変数の種類と数を調べる「Pandasのgroupby」
https://hk29.hatenablog.jp/entry/2021/07/05/232126

Python 2列からなるデータに対して、カテゴリ別にデータをリストで抽出する「pandasのgroupby×apply」
https://hk29.hatenablog.jp/entry/2021/09/12/234421

<広告>