在聚合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
错误。
一个解决方法是将PCFunc包装在lambda中:
DFGrouped.agg([("AdjustedSum", lambda x: PCFunc(x, 0.2))])
但这似乎很烦人。
所以最后的问题是:当使用带有多个参数的UDF而不将函数包装在lambda中时,有没有办法传递(name,function)元组... ??