【Python】Pandasのgroupby・aggを使ったデータ集計方法を練習問題を使って解説

もくじ
【Python】Pandasのgroupby・aggを使ってデータ集計する方法。
Python の Pandas ライブラリには、データの集計を行うための多くの方法が用意されています。最も一般的な方法は、groupby() メソッドと agg() メソッドを使用することです。
groupby() メソッドは、DataFream(データフレーム)をグループ分けし、集計操作(合計(sum)、平均(mean)、カウント(count)など)を行うことができます。agg() メソッドは、グループごとに集計を実行します。
活字だとイメージしにくいと思うのでgroupby() メソッドと agg() メソッドを使用した練習問題を作成しました。
たとえば、次のDataFreamについて考えてみましょう。
Pandasのgroupbyメソッドを使って集計する方法。
groupbyメソッドは、指定した列をキーにしてデータをグループ化します。
グループ化したデータに対して、集計操作(合計(sum)、平均(mean)、カウント(count)など)を行うことができます。
groupbyメソッドの結果は、groupbyオブジェクトとして返されます。
Pandasのgroupbyメソッド使って集計する練習問題1
ある売上データがあります。Pandasのgroupbyメソッドを使って、商品ごとの売上合計や平均売上を集計することができます。
一緒にやってみましょう。
#pandasインポート
import pandas as pd
data = {
'商品': ['A', 'B', 'A', 'B', 'A', 'B'],
'売上': [100, 200, 150, 300, 120, 250]
}
df = pd.DataFrame(data)
上記のDataFreamを使って、商品ごとの売上合計と平均売上を計算してみましょう。
#表示してみると
print(df)
商品 売上
0 A 100
1 B 200
2 A 150
3 B 300
4 A 120
5 B 250
groupbyを使って商品ごとの売上合計を集計する。
下記はgroupbyメソッドを使って売上の合計を集計するコードです。
sales_sum = df.groupby('商品')['売上'].sum()
商品A、Bごとにグループ分けし売上を集計します。
print('商品ごとの売上合計:')
print(sales_sum)
#売上合計の出力結果
商品ごとの売上合計:
商品
A 370
B 750
Name: 売上, dtype: int64
groupbyを使って商品ごとの平均売上を集計する。
下記はgroupbyメソッドを使って売上の平均を集計するコードです。
sales_mean = df.groupby('商品')['売上'].mean()
print('商品ごとの平均売上:')
print(sales_mean)
商品A、Bごとにグループ分けした平均売上を集計した出力結果です。
#平均売上の出力結果
商品ごとの平均売上:
商品
A 123.333333
B 250.000000
Name: 売上, dtype: float64
余談ですが、Excleでの平均値を求めるのはAverageですが、Pythonで平均値を求めるのはmean何だ……。
Pandasのgroupbyメソッド使った集計する練習問題2(応用)
さらに、地域別、時間別、カテゴリ別の売上を集計してみましょう。
import pandas as pd
data = {
'商品': ['A', 'B', 'A', 'B', 'A', 'B'],
'売上': [100, 200, 150, 300, 120, 250],
'地域': ['東京', '東京', '大阪', '大阪', '東京', '大阪'],
'時間帯': ['朝', '夜', '朝', '夜', '夜', '朝'],
'カテゴリ': ['食品', '食品', '雑貨', '雑貨', '食品', '雑貨']
}
df2 = pd.DataFrame(data)
上記のデータを表形式に出力結果は下記になります。
print(df2)
#出力結果
商品 売上 地域 時間帯 カテゴリ
0 A 100 東京 朝 食品
1 B 200 東京 夜 食品
2 A 150 大阪 朝 雑貨
3 B 300 大阪 夜 雑貨
4 A 120 東京 夜 食品
5 B 250 大阪 朝 雑貨
groupbyを使って地域・時間帯・カテゴリを集計する。
上記のDataFreamを使って、地域別、時間別、カテゴリ別の売上合計を集計してみましょう。
#地域別売上のコード
sales_by_region = df.groupby('地域')['売上'].sum()
#時間別売上のコード
sales_by_time = df.groupby('時間帯')['売上'].sum()
#カテゴリ別売上コード
sales_by_category = df.groupby('カテゴリ')['売上'].sum()
print('地域別の売上合計:')
print(sales_by_region)
print('時間帯別の売上合計:')
print(sales_by_time)
print('カテゴリ別の売上合計:')
print(sales_by_category)
上記のコードを実行すると、商品ごとの売上合計や売上平均、地域別・時間別・カテゴリ別の売上集計の出力結果が下記となります。
#出力結果
地域別の売上合計:
地域
大阪 700
東京 420
Name: 売上, dtype: int64
時間帯別の売上合計:
時間帯
夜 620
朝 500
Name: 売上, dtype: int64
カテゴリ別の売上合計:
カテゴリ
雑貨 700
食品 420
Name: 売上, dtype: int64
商品ごとの売上合計や売上平均、地域別・時間別・カテゴリ別の売上集計することによって、売上のトレンドやパターンがとなり、戦略的な意思決定に役立ちます。
Pandas groupby(応用編) count使う方法
以下のようなDataFreamを使用して、以下の操作を行ってみましょう。
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
'Age': [25, 30, 35, 25, 30],
'City': ['Tokyo', 'New York', 'London', 'Tokyo', 'London']
}
df = pd.DataFrame(data)
- 「City」列をグループ化し、各都市ごとに出現回数を数える。
- 「年齢」列をグループ化して、各年齢ごとに出現回数を数える。
先に、上記のコードを使用してDataFreamを作成します。
1.「City」列をグループ化し、各都市ごとに出現回数を数えるには、groupby()を使用し、その後にcountを適用します。
city_counts = df.groupby('City').count()
これにより、「City」列がグループ化され、各都市ごとの出現回数がカウントされます。
2.「年齢」列をグループし、各年齢ごとに出現回数を数えるには、「City」と同じ手順を使います。
age_counts = df.groupby('Age').count()
これにより、「年齢」列がグループ化され、各年齢ごとの出現回数がカウントされます。
city_counts
をage_counts
出力して確認することができます。
city_counts = df.groupby('City').count()
age_counts = df.groupby('Age').count()
#出力結果
Name Age
City
London 2 2
New York 1 1
Tokyo 2 2
Name City
Age
25 2 2
30 2 2
35 1 1
これにより、各都市や各年齢の出現回数が表示されます。
【Python】Pandasのaggメソッドを使って集計する
agg()メソッドは、DataFrameの各列に対して集計を行う機能です。agg()メソッドの引数には、集計関数を指定します。集計関数には、平均(mean)、最大値(max)、最小値(min)、合計(sum)、カウントなど、さまざまな関数を使用できます。agg()メソッドの戻り値は、DataFrameの新しいオブジェクトです。新しいオブジェクトの各列には、集計された値が格納されます。
Pandasのaggメソッド使って集計する練習問題
import pandas as pd
df3 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df3)
上記のデータを表形式に出力結果は下記になります。
#出力結果
A B C
0 1 4 7
1 2 5 8
2 3 6 9
Pandasのaggを使って各列の平均を計算する。
上記のDataFreamを使って、Pandasのagg()を使って各列の平均を計算してみましょう。
df.agg('mean')
#出力結果
A 2.0
B 5.0
C 8.0
sum 15.0
dtype: float64
Pandasのaggを使って最大値と最小値を計算する。
上記のDataFreamをPandasのagg()を使って各列の最大値と最小値を計算してみましょう。
df.agg(['max', 'min'])
#出力結果
A B C sum
max 3 6 9 18
min 1 4 7 12
Pandasのaggを使って合計と平均を計算する。
上記のDataFreamをPandasのagg()を使って各列の合計と平均値を計算してみましょう。
df.agg({'sum', 'mean'})
#出力結果
A B C sum
mean 2.0 5.0 8.0 15.0
sum 6.0 15.0 24.0 45.0
aggメソッドは、グループごとに集計を行うためのメソッドです。集計には、様々な関数を使うことができました。DataFreamを全体を列を指定せず、一括で集計するのはaggメソッドの方が楽だったように思うのですがいかがでしたか?
【Python】Pandasのgroupby・aggを使った集計するまとめ
Pandas のgroupbyとaggを使って、DataFreamをグループ分けして集計することができました。グループ分けには、列名や列の値を指定することができます。集計には、様々な関数を使用することができます。
一括機能はデータ解析の強力なツールです。データの概要と洞察を得るために積極的に活用し、データの分析やビジネス上の意思決定をサポートするために、Pandas の一括メソッド(groupbyメソッドやaggメソッド)を正しく使用しましょう。
1件のコメントがあります