[英]Applying weighted average function to column in pandas groupby object, but weights sum to zero
我將不同的功能應用於pandas groupby對象中的每一列。 這些函數之一是加權平均值,其中權重是DataFrame另一列中的關聯值。 但是,對於我的許多組,權重之和為零。 因此,我在運行代碼時收到“權重總和為零,無法規范化”錯誤消息。
參考下面的代碼,對於由col1值x和col2值y定義的組,col1 = x和col2 = y的行中col3中的值之和為零,從而在col5的加權平均值中產生誤差。
有什么方法可以使權重總和為零的組返回零的“加權平均值”值? 謝謝!
df = pd.DataFrame([['x','x','x','y','y','y'],['a','a','b','b','c','c'],
[0,0,3,4,5,6],[1,1,1,1,1,1],[0,0,4,6,2,8]],
).transpose()
df.columns = ['col1','col2','col3','col4','col5']
weighted_average = lambda x: np.average(x, weights=df.loc[x.index, 'col3'])
averages = df.groupby(['col1','col2']).agg({'col3':'sum',
'col4':'sum',
'col5': weighted_average})
我們可以執行以下操作:
col3
和col5
是否有0
。 否則采用加權平均值。 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.