我将不同的功能应用于pandas groupby对象中的每一列。这些函数之一是加权平均值,其中权重是DataFrame另一列中的关联值。但是,对于我的许多组,权重之和为零。因此,我在运行代码时收到“重量总和为零,无法规范化”的错误消息。
请参阅下面的代码,对于由col1值x和col2值y定义的组,col1 = x和col2 = y的行中col3中的值之和为零,从而在col5。
是否有办法使权重总和为零的组返回零的“加权平均值”值?谢谢!
sql = (select([
user.c.id,
user.c.full_name
]).where(user.c.id == 123))
答案 0 :(得分:0)
我们可以执行以下操作:
0
和col3
中是否有col5
。否则,采用加权平均值。sum
聚合def weighted_average(x):
if (x.col3 > 0).all() & (x.col5 > 0).all():
return np.average(x.col5, weights=x.col3)
else:
return 0
averages = df.groupby(['col1','col2']).agg({'col3':'sum',
'col4':'sum'})
weighted_avg = df.groupby(['col1','col2']).apply(weighted_average)
df_averages = pd.concat([averages, weighted_avg ], axis=1)\
.reset_index()\
.rename({0:'col5'}, axis=1)
哪种产量:
print(df_averages)
col3 col4 col5
col1 col2
x a 0 2 0.000000
b 3 1 4.000000
y b 4 1 6.000000
c 11 2 5.272727