GroupBy在Python Pandas中起作用,如SUM(col_1*col_2),加权平均等

Art*_*r G 9 python pandas

是否可以直接计算两列的乘积(或例如总和)而不使用

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()慢得多.

Wes*_*ney 8

我想最终构建一个嵌入式数组表达式求值器(类固醇上的Numexpr)来做这样的事情.现在我们正在处理Python的局限性 - 如果你实现了一个Cython聚合器,(x * y).sum()那么它可以与groupby连接,但理想情况下你可以将Python表达式编写为函数:

def weight_sum(x, y):
    return (x * y).sum()
Run Code Online (Sandbox Code Playgroud)

这将得到"JIT编译",并且与groupby(...)一样快.sum().我所描述的是一个非常重要的(许多月)项目.如果有一个兼容BSD的APL实现,我可能会更快地做一些类似上面的事情(只是大声思考).