ホームページ >バックエンド開発 >Python チュートリアル >Pandas の複数の GroupBy 列に複数の関数を効率的に適用するにはどうすればよいですか?

Pandas の複数の GroupBy 列に複数の関数を効率的に適用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 18:01:12608ブラウズ

How Can I Efficiently Apply Multiple Functions to Multiple GroupBy Columns in Pandas?

複数の GroupBy 列に複数の関数を適用する

はじめに

グループ化されたデータを操作する場合、多くの場合、複数の関数を複数の列に適用する必要があります。 Pandas ライブラリには、これを実現するためのメソッド (agg メソッドや apply メソッドなど) がいくつか用意されています。ただし、これらのメソッドには特定の制限があり、常に特定のユースケースを満たしているとは限りません。

Dict での agg の使用

質問で述べたように、groupby シリーズに複数の関数を適用することが可能です。辞書を使用したオブジェクト:

grouped['D'].agg({'result1' : np.sum,
                   'result2' : np.mean})

このアプローチでは、列名をキーとして指定し、対応する関数を値として指定できます。ただし、これは Series の groupby オブジェクトに対してのみ機能します。 groupby DataFrame に適用される場合、ディクショナリ キーは出力列名ではなく列名であることが期待されます。

Lambda 関数での agg の使用

この質問では、agg 内で lambda 関数を使用して実行することも検討しています。 groupby オブジェクト内の他の列に基づく操作。このアプローチは、関数に他の列への依存関係が含まれる場合に適しています。 agg メソッドでは明示的にサポートされていませんが、列名を文字列として手動で指定することでこの制限を回避できます。

grouped.agg({'C_sum' : lambda x: x['C'].sum(),
             'C_std': lambda x: x['C'].std(),
             'D_sum' : lambda x: x['D'].sum()},
             'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)

このアプローチにより、他の列に依存する関数も含め、複数の関数を異なる列に適用できます。 。ただし、冗長になる可能性があり、列名の慎重な処理が必要です。

カスタム関数で apply を使用する

より柔軟なアプローチは、グループ DataFrame 全体を渡す apply メソッドを使用することです。提供された関数。これにより、より複雑な操作やグループ内の列間の相互作用を実行できるようになります。

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)

適切にラベル付けされた列を含む Series を返すことで、groupby DataFrame で複数の計算を簡単に実行できます。このアプローチはより汎用性が高く、複数の列に基づいた複雑な操作が可能です。

結論

グループ化された複数の列に複数の関数を適用するには、データ構造と目的の操作を慎重に検討する必要があります。 agg メソッドは Series オブジェクトに対する単純な操作に適していますが、apply メソッドは groupby DataFrame を操作したり、複雑な計算を実行したりする場合に優れた柔軟性を提供します。

以上がPandas の複数の GroupBy 列に複数の関数を効率的に適用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。