pandasのオブジェクトでデータを集計した結果のGroupBy
オブジェクトでは、列ヘッダーは集計関数の名前です。知られているように、列名を制御するために、(名前、関数) タプルのリストを .agg で渡すことができます。
ユーザー定義関数を渡すときに、見出し名を同様に制御する方法を知っている人はいますか? 例えば:
#function to return max value minus min value
def MinMaxFunc(x):
return np.max(x) - np.min(x)
DFGrouped = DF.groupby(key)
DFGrouped.agg([('Max_Minus_Min', MinMaxFunc)])
これは期待どおりに機能します。ただし、複数の引数を持つ UDF では状況が異なります。
#function to return sum of values adjusted for some percentage
def PCFunc(x, PCT_Val):
return np.sum(x) * PCT_Val
# Pass function in regular manner
DFGrouped.agg(PCFunc, 0.2)
#Pass function so as to rename headers in resulting object
DFGrouped.agg([("Adjusted Sum", PCFunc, 0.2)])
これは機能せず、too many values to unpack
エラーが発生します。
回避策の 1 つは、代わりに PCFunc をラムダでラップすることです。
DFGrouped.agg([("AdjustedSum", lambda x: PCFunc(x, 0.2))])
しかし、それは面倒なようです。
最後に質問です:agg
関数をlambda
??