groupbyメソッドの使い方

groupbyメソッドとは?

groupbyメソッドとは、Pandasのデータフレームやシリーズをグループ化するための強力なメソッドです。
.groupby()メソッドを使用することで、特定の列の値に基づいてデータをグループ化し、それぞれのグループに対して集計や操作を行うことができます。


以下に.groupby()メソッドの一般的な使い方といくつかの例を示します。

単一の列に基づくグループ化と集計

import pandas as pd

# サンプルデータフレームの作成
data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
        'Age': [25, 30, 35, 28, 32],
        'Salary': [5000, 6000, 7000, 5500, 6500]}
df = pd.DataFrame(data)

# Name列でグループ化して平均年齢を計算
grouped = df.groupby('Name')
average_age = grouped['Age'].mean()

print(average_age)

出力

Name
Alice      26.5
Bob        31.0
Charlie    35.0
Name: Age, dtype: float64

名前ごとに、'Age'が平均化されていることがわかります。

複数の列に基づくグループ化と集計

import pandas as pd

# サンプルデータフレームの作成
data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
        'Gender': ['Female', 'Male', 'Male', 'Female', 'Male'],
        'Salary': [5000, 6000, 7000, 5500, 6500]}
df = pd.DataFrame(data)

# NameとGenderの組み合わせでグループ化して平均給与を計算
grouped = df.groupby(['Name', 'Gender'])
average_salary = grouped['Salary'].mean()

print(average_salary)

出力

Name     Gender
Alice    Female    5250.0
Bob      Male      6250.0
Charlie  Male      7000.0
Name: Salary, dtype: float64

'Name'列と、'Gender'列の組み合わせでグループ化し、'Salary'を平均化しています。

複数の集計統計量の計算

import pandas as pd

# サンプルデータフレームの作成
data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
        'Age': [25, 30, 35, 28, 32],
        'Salary': [5000, 6000, 7000, 5500, 6500]}
df = pd.DataFrame(data)

# Name列でグループ化して年齢の統計情報を計算
grouped = df.groupby('Name')
summary_statistics = grouped['Age'].agg(['min', 'max', 'mean', 'median'])

print(summary_statistics)

出力

         min  max  mean  median
Name                           
Alice     25   28  26.5    26.5
Bob       30   32  31.0    31.0
Charlie   35   35  35.0    35.0

この例では、'Name'列に基づいてグループ化を行い、各グループの年齢に対して、最小値・最大値・平均値・中央値を算出しています。

補足

上記の例において、グループ化されたデータは、for文を使うことで中身をそのまま取り出すことができます。
group_nameはグループの値、group_dataは対応するデータを表します。

for group_name, group_data in grouped:
    print(group_name)
    print(group_data)

出力

Alice
    Name  Age  Salary
0  Alice   25    5000
3  Alice   28    5500
Bob
  Name  Age  Salary
1  Bob   30    6000
4  Bob   32    6500
Charlie
      Name  Age  Salary
2  Charlie   35    7000

まとめ

.groupby()メソッドは、Pandasのデータフレームやシリーズをグループ化するための便利なメソッドです。主な使い方としては以下の通りです。

  1. 単一の列に基づくグループ化: df.groupby('column_name')
  2. 複数の列に基づくグループ化: df.groupby(['column_name1', 'column_name2'])
  3. グループごとの集計統計量の計算: grouped['numeric_column'].agg(['mean', 'sum', 'count'])
  4. グループごとの操作: for group_name, group_data in grouped:


if文, for文などを用いて、「同じ名称だった場合、〜の処理を行う」など少し面倒な処理をせずとも、一発でグループごとに集約・計算ができ、非常に便利なため、機会があれば積極的に使っていきましょう!