4

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??

4

0 に答える 0