python - 如何在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
请任何人帮我解决这个问题。
提前致谢。
解决方案
感谢上帝,经过这么多步道,我终于找到了解决方案。下面我提到了生成预期输出的代码。
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')
推荐阅读
- php - 在 Laravel 中从多对多关系中检索数据
- angular - 离子:从http调用中获取数据
- google-tag-manager - 按钮单击未在 GTM 中注册
- javascript - 结合多次点击和按键功能 - Jquery 优化
- sql - ~ SQLITE 中的运算符
- python - Python mysql.connector 不返回所有行
- c# - icsharpcode.net/sharpdevelop/avalonedit 中不存在 WPF 设计错误 (VerticalScrollBarVisibility) 和 (HorizontalScrollBarVisibilty)
- html - 使用正则表达式替换 html 标签 - 无脚本
- python - 绘制直方图,其中条形图根据第二个值列表着色
- javascript - 反应本机抽屉中的身份验证流程