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