Series の groupby オブジェクトとは異なり、ディクショナリを使用して DataFrame の groupby オブジェクトに複数の関数を適用するのは簡単ではありません。ただし、次のメソッドを使用してこれを効率的に実現する方法があります。
apply メソッドの使用
必要な関数が個々の列で動作する場合は、apply メソッドを利用します。適切なオプション。 apply メソッドを使用すると、グループ全体 (DataFrame) を別のオブジェクトに変換する関数を渡すことができます。例:
grouped = df.groupby('group') aggregated = grouped.apply(lambda x: pd.Series({ 'a_sum': x['a'].sum(), 'a_max': x['a'].max(), 'b_mean': x['b'].mean(), }))
このアプローチは、複数の列を効率的に集約し、目的の列を含む DataFrame を返します。
apply からシリーズを返す
対話する必要がある複数の列を処理する場合、agg メソッドは暗黙的に Series を集計関数に渡すため、使用できません。代わりに、Series を返すカスタム関数を作成できます。例:
def aggregate_group(x): return pd.Series({ 'a_sum': x['a'].sum(), 'b_mean': x['b'].mean(), 'c_d_prod': (x['c'] * x['d']).sum() }) grouped = df.groupby('group') result = grouped.apply(aggregate_group)
このメソッドを使用すると、複数のグループ化された列に複数の関数を適用し、単一のステップで結果を返すことができます。
関数名のカスタマイズ
必要に応じて、__name__ 属性を使用して関数にカスタム名を割り当てることができます。関数を定義した後、__name__ を目的の名前に設定するだけで、生成される列の明瞭さが向上します。
ループを使用して groupby オブジェクトを反復処理することは、一般に上記の方法に比べて効率が低いことに注意してください。 Pandas はベクトル化された操作用に最適化されており、これらの組み込みメソッドが効率的なグループレベルの分析に推奨されるアプローチになっています。
以上がPandas でグループ化された DataFrame 列に複数の関数を効率的に適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。