複数のグループ化された列に複数の関数を適用する方法
Pandas の Groupby 操作を使用すると、特定の列またはキーに基づいてデータを集計できます。ただし、複雑なデータセットを操作する場合は、グループ化されたデータ内の異なる列に対して複数の操作を実行する必要がある場合があります。
シリーズのグループ化にディクショナリを使用する
Series groupby オブジェクトの場合、次に示すように、辞書を使用して複数の関数を指定し、列名を出力できます。以下:
grouped['D'].agg({'result1' : np.sum, .....: 'result2' : np.mean})
ただし、このアプローチは、関数を適用するための列名をディクショナリ キーで表すことが期待されるため、DataFrame の groupby オブジェクトには機能しません。
カスタム関数apply
この制限に対処するには、適用された関数に暗黙的に DataFrame を渡す apply メソッドを利用できます。カスタム関数を定義し、Series または MultiIndex Series を返すことで、各グループ内の複数の列に対して複数の操作を実行できます:
Series を返す:
def f(x): d = {} d['a_sum'] = x['a'].sum() d['a_max'] = x['a'].max() d['b_mean'] = x['b'].mean() d['c_d_prodsum'] = (x['c'] * x['d']).sum() return pd.Series(d, index=['a_sum', 'a_max', 'b_mean', 'c_d_prodsum']) df.groupby('group').apply(f)
シリーズを返すMultiIndex:
def f_mi(x): d = [] d.append(x['a'].sum()) d.append(x['a'].max()) d.append(x['b'].mean()) d.append((x['c'] * x['d']).sum()) return pd.Series(d, index=[['a', 'a', 'b', 'c_d'], ['sum', 'max', 'mean', 'prodsum']]) df.groupby('group').apply(f_mi)
このアプローチは、グループ化されたデータに対して複雑な集計を実行する柔軟な方法を提供し、各グループ内の複数の列に対して複数の操作を可能にします。
以上がPandas GroupBy の複数の列に複数の関数を適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。