非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python】DataFrameでgroupbyを使ったデータ集計とカスタム処理をマスターしよう

   

Pythonのpandasライブラリには、大量のデータを効率的に処理するための強力なツールがたくさんあります。中でもgroupbyは、データをグループ化して集計や処理を行う際に非常に便利な機能です。今回は、groupbyの基本的な使い方から応用例、実用的なシナリオまでを紹介します。これを理解すれば、データ分析における多くの場面で活用できるでしょう。

基本例: グループ化と集計

groupbyの基本的な使い方を紹介します。まず、データをある基準でグループ化し集計を行います。Category列でデータをグループ化し、各カテゴリーの売上(Sales)の合計を計算しています。

import pandas as pd

# サンプルデータ
data = {
    'Category': ['A', 'B', 'A', 'B', 'C'],
    'Sales': [100, 200, 150, 300, 250]
}
df = pd.DataFrame(data)

# グループごとの合計を計算
grouped = df.groupby('Category')['Sales'].sum()

print(grouped)

# [実行結果]
# Category
# A 250
# B 500
# C 250
# Name: Sales, dtype: int64
 

 

応用例: 複数列でのグループ化とカスタム関数の適用

複数列でデータをグループ化しカスタム関数を適用する方法を見ていきます。RegionCategoryの2つの列でグループ化し、各グループ内の売上の平均(mean)と最大値と最小値の差(range_calc)を計算しています。

import pandas as pd

# サンプルデータ
data = {
    'Region': ['East', 'East', 'West', 'West', 'East'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Sales': [100, 200, 150, 300, 250]
}
df = pd.DataFrame(data)

# 複数列でグループ化し、カスタム関数で集計
def range_calc(x):
    return x.max() - x.min()

grouped = df.groupby(['Region', 'Category'])['Sales'].agg(['mean', range_calc])

print(grouped)

# [実行結果]
#                   mean  range_calc
# Region Category
# East   A         175.0         150
#        B         200.0           0
# West   A         150.0           0
#        B         300.0           0
 

 

実用例: 売上シェアの計算

実際のデータ分析でよく使われる、カテゴリごとの売上シェアを計算する方法です。この例では、Categoryごとに売上の合計を計算し、各商品がそのカテゴリの売上合計に対してどれくらいのシェアを持っているかを計算しています。

import pandas as pd

# サンプルデータ
data = {
    'Product': ['P1', 'P2', 'P3', 'P4', 'P5'],
    'Category': ['A', 'A', 'B', 'B', 'C'],
    'Sales': [100, 150, 200, 300, 250]
}
df = pd.DataFrame(data)

# カテゴリごとの合計売上を計算
df['Category Total'] = df.groupby('Category')['Sales'].transform('sum')

# 各商品の売上シェアを計算
df['Sales Share'] = df['Sales'] / df['Category Total'] * 100

print(df)

# [実行結果]
#   Product Category  Sales  Category Total  Sales Share
# 0      P1        A    100             250         40.0
# 1      P2        A    150             250         60.0
# 2      P3        B    200             500         40.0
# 3      P4        B    300             500         60.0
# 4      P5        C    250             250        100.0
 

 

まとめ

groupbyを使うことで、データを効率的に集計・処理することができます。基本的なグループ化だけでなく、複数列でのグループ化やカスタム関数を使った集計、さらには実際のデータ分析で役立つ売上シェアの計算といった応用も可能です。これらのテクニックを駆使することで、より複雑なデータ処理が簡単に行えるようになります。ぜひ実際のデータで試してみてください。

スポンサーリンク

 - Python