ドキュメントには、キーとして、出力列名で辞書を使用して、一度に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
ただし、これはSeries groupbyオブジェクトでのみ機能します。そして、dictが同様にgroupby DataFrameに渡されると、キーは、関数が適用される列名であると想定します。
私がしたいことは、複数の関数を複数の列に適用することです(ただし、特定の列は複数回操作されます)。また、一部の関数はgroupbyオブジェクトの他の列に依存します(sumif関数など)。私の現在の解決策は、列ごとに行き、上記のコードのようなことをし、他の行に依存する関数にラムダを使用することです。しかし、これには長い時間がかかります(groupbyオブジェクトを反復処理するには長い時間がかかると思います)。一度の実行で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
呼び出された場合、キーは列である必要があるため)。
私がやりたいことを行うための組み込みの方法はありますか、またはこの機能が追加される可能性がありますか、それとも手動でgroupbyを反復処理する必要があるだけですか?
ありがとう