4

在 pandas 中聚合对象中的数据产生的GroupBy对象中,列标题是聚合函数的名称。众所周知,为了必须控制列名,可以使用 .agg 传递 (name, function) 元组列表

有谁知道在传递用户定义的函数时如何对标题名称进行类似的控制?例如:

#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错误。

一种解决方法是将 PCFunc 包装在 lambda 中:

DFGrouped.agg([("AdjustedSum", lambda x: PCFunc(x, 0.2))])

但这似乎很烦人。

所以最后的问题是:有没有办法在使用agg具有多个参数的 UDF 时传递 (name, function) 元组而不将函数包装在lambda??

4

0 回答 0