我有一个如下所示的权重系列:
a 0.2
b 0.3
c 0.5
和数据框:
a b c
1 1 2 2
2 Nan 2 2
3 Nan 1 Nan
...
我想计算数据帧的加权平均值,如下所示:
(dataframe * weights).sum(axis=1)
问题在于,当数据帧的值为Nan时,我希望将相应的权重相等地添加到其他权重。例如,对于第二行,权重对于b应为0.4,对于c应为0.6。对于第三行,权重矩阵对于b应为1。
答案 0 :(得分:4)
您可以使用专为该用例设计的numpy的average for masked arrays。让s
为权重系列,df
为数据框:
np.ma.average(np.ma.array(df.values, mask=df.isnull().values),
weights=s.values, axis=1)
.data
属性包含结果:
array([ 1.8, 2. , 1. ])
修改:根据评论中的建议,您可以将结果转换为系列:
pd.Series(np.ma.average(np.ma.array(df.values, mask=df.isnull().values),
weights=s.values, axis=1).data, index=df.index)