有没有办法编写DataFrame.agg方法中使用的聚合函数,可以访问聚合的多个数据列?典型的用例是加权平均加权标准偏差函数.
我希望能够写出类似的东西
def wAvg(c, w):
return ((c * w).sum() / w.sum())
df = DataFrame(....) # df has columns c and w, i want weighted average
# of c using w as weight.
df.aggregate ({"c": wAvg}) # and somehow tell it to use w column as weights ...
Run Code Online (Sandbox Code Playgroud) 是否可以直接计算两列的乘积(或例如总和)而不使用
grouped.apply(lambda x: (x.a*x.b).sum()
Run Code Online (Sandbox Code Playgroud)
它的使用速度更快(在我的机器上不到一半的时间)
df['helper'] = df.a*df.b
grouped= df.groupby(something)
grouped['helper'].sum()
df.drop('helper', axis=1)
Run Code Online (Sandbox Code Playgroud)
但我真的不喜欢这样做.例如,计算每组的加权平均值是有用的.lambda方法就是这样
grouped.apply(lambda x: (x.a*x.b).sum()/(df.b).sum())
Run Code Online (Sandbox Code Playgroud)
并且再次比将助手除以b.sum()慢得多.