如何在计算加权平均值时处理Nan值

时间:2017-05-12 08:22:26

标签: python pandas

我有一个如下所示的权重系列:

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。

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)