1: Pandasの基本的なgroupbyの使い方
Pandasのgroupby
は、データを特定のキーでグループ化し、その後にさまざまな集計や計算を行うための強力なツールです。データの分析や集計処理において、多くのシチュエーションで使用されます。ここでは、基本的な使い方と簡単なサンプルコードを紹介します。
1-1: groupbyを用いたデータのグループ化
groupby
は、DataFrameを特定の列を基準にグループ化します。以下のサンプルデータを使って見ていきましょう。
import pandas as pd
# サンプルデータ
data = {'名前': ['田中', '鈴木', '佐藤', '田中', '鈴木'],
'年齢': [23, 35, 25, 23, 40],
'得点': [80, 90, 70, 85, 78]}
df = pd.DataFrame(data)
# 名前ごとにグループ化
grouped = df.groupby('名前')
print(grouped.mean())
このコードでは、名前ごとにデータがグループ化され、各グループの平均値が計算されます。

1-2: DataFrameでのgroupbyの基本メソッド
グループ化されたデータに対して、mean
やsum
といったメソッドを使って集計が可能です。以下の例では、グループごとの合計得点を計算します。
# 名前ごとの合計得点
print(grouped.sum())

2: groupbyでの集計と計算の方法
groupby
を使えば、複数の集計を一度に行うこともできます。agg
メソッドを使えば、グループ化されたデータに対して複数の操作を同時に行うことが可能です。
2-1: aggメソッドを使った複数条件の集計
以下のコードは、名前ごとに平均得点と得点の合計を一度に計算する例です。
# 平均得点と合計得点を計算
agg_results = grouped['得点'].agg(['mean', 'sum'])
print(agg_results)

3: 複数キーや複数列でのグループ化
groupby
では、複数の列をキーとして指定してデータをグループ化することも可能です。これにより、より細かい分析が可能になります。
3-1: 複数列を使ったデータのグループ分け
次の例では、名前と年齢をキーにしてデータをグループ化します。
# 名前と年齢をキーにグループ化
multi_grouped = df.groupby(['名前', '年齢'])
print(multi_grouped.sum())

4: applyメソッドによる柔軟な処理
apply
メソッドを使うと、カスタム関数をグループに適用することができます。これにより、標準的な集計メソッドでは対応できない複雑な処理が可能になります。
4-1: applyでの関数適用とデータ処理
以下のコードでは、得点が80点以上の学生の名前をリスト化します。
# 80点以上の学生の名前をリスト化
high_scores = grouped.apply(lambda x: x[x['得点'] >= 80])
print(high_scores)

5: NaNや欠損値を含むデータの処理
データ分析の現場では、欠損値が含まれることがよくあります。groupby
は、欠損値を含むデータに対しても柔軟に対応できます。
5-1: NaNデータを含む場合のgroupby挙動
欠損値が含まれる場合、groupby
はどのように動作するのかを見てみましょう。以下のサンプルデータを使います。
# サンプルデータに欠損値を追加
data = {'名前': ['田中', '鈴木', '佐藤', '田中', None],
'年齢': [23, 35, 25, 23, 40],
'得点': [80, 90, None, 85, 78]}
df = pd.DataFrame(data)
# グループ化と集計
grouped = df.groupby('名前')
print(grouped.mean())

このコードでは、欠損値を含むグループを除外せずに平均を計算します。
このように、groupby
はデータのグループ化と集計において非常に強力なツールです。この記事では基本的な使い方から少し応用的なテクニックまでを紹介しましたが、実際のデータ分析ではさらに多様な方法で活用できます。ぜひ、あなたのプロジェクトに応じてこれらの方法を試してみてください。