【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)
  1. 「City」列をグループ化し、各都市ごとに出現回数を数える。
  2. 「年齢」列をグループ化して、各年齢ごとに出現回数を数える。

先に、上記のコードを使用してDataFreamを作成します。

1.「City」列をグループ化し、各都市ごとに出現回数を数えるには、groupby()を使用し、その後にcountを適用します。

city_counts = df.groupby('City').count()

これにより、「City」列がグループ化され、各都市ごとの出現回数がカウントされます。

2.「年齢」列をグループし、各年齢ごとに出現回数を数えるには、「City」と同じ手順を使います。

age_counts = df.groupby('Age').count()

これにより、「年齢」列がグループ化され、各年齢ごとの出現回数がカウントされます。

city_countsage_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メソッド)を正しく使用しましょう。

最初のコメントをしよう

必須