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のデータフレームやシリーズをグループ化するための便利なメソッドです。主な使い方としては以下の通りです。
- 単一の列に基づくグループ化: df.groupby('column_name')
- 複数の列に基づくグループ化: df.groupby(['column_name1', 'column_name2'])
- グループごとの集計統計量の計算: grouped['numeric_column'].agg(['mean', 'sum', 'count'])
- グループごとの操作: for group_name, group_data in grouped:
if文, for文などを用いて、「同じ名称だった場合、〜の処理を行う」など少し面倒な処理をせずとも、一発でグループごとに集約・計算ができ、非常に便利なため、機会があれば積極的に使っていきましょう!