首页 > 解决方案 > 如何在python的groupby函数中使用带有两个参数的用户定义函数

问题描述

我的数据是这样的:

x1  x2  var1  var2
0   1   1     1 
0   0   2     2
0   0   1     3
1   0   3     3

我定义了一个计算加权平均值的函数——

def W_M(x,w):
    y1=w.div(w.sum())
    m=x*y1.div(y1.sum())
    m=m.sum()
    return(m)

在这里,我想计算 var1 的 W_M,并在数据按“by”对象分组时使用 var2 作为权重。

by=['x1','x2']
df.groupby(by,as_index=False).agg({var1: lambda x: x.W_M(var1,var2)})

我不知道上面的 groupby 代码是否正确..但我试过了。

我想要如下所示的输出:

x1 x2 var1 var2
0   1   1     1
0   0   1     5
1   0   1     3

请任何人帮我解决这个问题。

提前致谢。

标签: pythonpandaspandas-groupby

解决方案


感谢上帝,经过这么多步道,我终于找到了解决方案。下面我提到了生成预期输出的代码。

out=data.groupby(['x1','x2'],as_index=False).apply(lambda x: np.average(x['var1'], 
weights=x['var2']))
bn=pd.DataFrame(out)
bn.reset_index(inplace=True)
bn=bn.rename(columns={0:'var1'})
result = pd.merge(bn,
                  data[['x1','x2','var2']],
                  on=['x1','x2'], 
                  how='left')

推荐阅读