Pandas DataFrameのgroupbyに関数適用(apply、agg)[Python]

はじめに

PandasはPythonでデータ解析を行う際に非常に便利なライブラリです。特に、データのグループごとに関数を適用する際には、groupbyメソッドが大変便利です。本記事では、Pandasのgroupbyメソッドを使って関数を適用する方法について詳しく解説します。

Pandasのgroupbyに関数を適用する方法の概観

groupbyメソッドを使用すると、データをグループごとに分割して処理することができます。そして、このグループごとのデータに対して関数を適用することができます。Pandasでは、主にapplyメソッドとaggメソッドの2つの方法を使って関数を適用します。

groupbyとapplyの基本的な使い方:カスタム関数の適用

まずは、groupbyとapplyを使ってカスタム関数を適用する方法について見ていきましょう。

import pandas as pd
# サンプルデータの作成
data = {'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
        'B': ['one', 'one', 'two', 'two', 'two', 'one', 'two', 'one'],
        'C': [1, 2, 3, 4, 5, 6, 7, 8],
        'D': [10, 20, 30, 40, 50, 60, 70, 80]}
df = pd.DataFrame(data)
# カスタム関数の定義
def custom_func(x):
    return x.sum() * 2
# グループごとにカスタム関数を適用
result = df.groupby('A')['C'].apply(custom_func)
print(result)

上記のコードでは、DataFrameに対してgroupbyメソッドを使用して’A’列でグループ化し、グループごとに’C’列に対してcustom_func関数を適用しています。結果は新しいSeriesとして返されます。

groupbyとaggの基本的な使い方:複数の統計関数の適用

次に、groupbyとaggを使って複数の統計関数を適用する方法を見ていきましょう。

# グループごとに複数の統計関数を適用
result = df.groupby('A')['C'].agg(['sum', 'mean', 'max'])
print(result)

上記のコードでは、DataFrameに対してgroupbyメソッドを使用して’A’列でグループ化し、グループごとに’C’列に対して複数の統計関数(sum、mean、max)を適用しています。結果は新しいDataFrameとして返されます。

aggを使った複数カラムへの複数関数の適用:具体的な例とともに

さらに、aggを使って複数のカラムに対して複数の関数を適用する方法を具体的な例とともに見ていきましょう。

# サンプルデータの作成
data = {'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
        'B': ['one', 'one', 'two', 'two', 'two', 'one', 'two', 'one'],
        'C': [1, 2, 3, 4, 5, 6, 7, 8],
        'D': [10, 20, 30, 40, 50, 60, 70, 80]}
df = pd.DataFrame(data)
# グループごとに複数の統計関数を適用
result = df.groupby(['A', 'B']).agg({'C': ['sum', 'mean'], 'D': 'max'})
print(result)

上記のコードでは、DataFrameに対してgroupbyメソッドを使用して’A’列と’B’列でグループ化し、’C’列に対してはsumとmeanの2つの統計関数を、’D’列に対してはmaxの統計関数を適用しています。結果は新しいDataFrameとして返されます。

applyとaggの主な違いと使いどころ

applyとaggはどちらもgroupbyメソッドを使って関数を適用する方法ですが、それぞれ異なる使い方や特徴があります。

applyメソッドは、各グループごとに関数を適用するため、カスタム関数を使う際に便利です。一方、aggメソッドは、統計関数を使って複数のカラムに対してまとめて統計情報を計算する際に便利です。

例えば、カテゴリごとの平均値を求める場合には、applyメソッドを使ってカスタム関数を定義し、各グループごとに平均を計算することができます。一方、最大値値や合計値など、統計的な情報を一度に計算する場合には、aggメソッドを使って複数の統計関数を適用することが効率的です。

applyとaggの使いどころは、データ解析の目的や処理の要件によって異なります。applyは柔軟性があり、より複雑な関数の適用が可能ですが、一つのグループに対して一度に処理されるため、大規模なデータセットではパフォーマンスの面で劣ることがあります。一方、aggは効率的な統計計算を行うことができますが、統計関数に制約があります。

まとめ

Pandasのgroupbyメソッドを使って関数を適用する方法について解説しました。applyメソッドを使えばカスタム関数をグループごとに適用し、aggメソッドを使えば統計関数を複数のカラムに対して一度に適用することができます。どちらの方法を選ぶかは、データ解析の目的や処理の要件によって異なります。適切な方法を選ぶことで、効率的にデータを集計・分析することができます。

本記事では、Pandas DataFrameのgroupbyに関数適用の基本的な使い方を紹介しましたが、さらに多くの応用や詳細な使い方があります。ぜひこれらの方法を活用して、データ解析の効率化を図ってください。