【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
応用例: 複数列でのグループ化とカスタム関数の適用
複数列でデータをグループ化しカスタム関数を適用する方法を見ていきます。RegionとCategoryの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を使うことで、データを効率的に集計・処理することができます。基本的なグループ化だけでなく、複数列でのグループ化やカスタム関数を使った集計、さらには実際のデータ分析で役立つ売上シェアの計算といった応用も可能です。これらのテクニックを駆使することで、より複雑なデータ処理が簡単に行えるようになります。ぜひ実際のデータで試してみてください。
スポンサーリンク