ドキュメントは、出力列名をキーとして持つdictを使用して、groupbyオブジェクトに一度に複数の関数を適用する方法を示しています。
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
ただし、これはSeriesgroupbyオブジェクトでのみ機能します。また、dictが同様にgroupby DataFrameに渡される場合、キーは関数が適用される列名であると想定されます。
私がやりたいのは、複数の関数を複数の列に適用することです(ただし、特定の列は複数回操作されます)。また、一部の関数は、groupbyオブジェクトの他の列に依存します(sumif関数など)。私の現在の解決策は、列ごとに移動し、他の行に依存する関数にラムダを使用して、上記のコードのようなことを行うことです。しかし、これには長い時間がかかります(groupbyオブジェクトを反復処理するのに長い時間がかかると思います)。1回の実行でgroupbyオブジェクト全体を反復処理するように変更する必要がありますが、これをいくらかきれいに行うための組み込みの方法がパンダにあるのではないかと思います。
たとえば、私は次のようなものを試しました
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(), ...)
しかし、予想どおり、KeyErrorが発生します(DataFrameから呼び出された場合、キーは列である必要agg
があるため)。
私がやりたいことを実行するための組み込みの方法はありますか、またはこの機能が追加される可能性はありますか、それとも手動でグループ化を繰り返す必要がありますか?