丢失列时将权重更改为我的索引

前端之家收集整理的这篇文章主要介绍了丢失列时将权重更改为我的索引 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个熊猫数据框,其中有不同的国家(行)和4个指标(列)A,B,C和D.
对于每个指标,我都有一个特定的权重用于计算其加权总和,比如说:Weigth_A = 0.2,Weigth_B = 0.2,Weight_C = 0.4,Weight_D = 0.2

这是我的加权总和的公式

  1. df['W_Sum'] = Weigth_A*df['A'] + Weigth_B*df['B'] + Weigth_C*df['C'] + Weigth_D*df['D']

但是,如果某列为NaN(在这种情况下为D),则需要将加权和更改为正常平均值;

  1. df['W_Sum'] = 0.33*df['A'] + 0.33*df['B'] + 0.33*df['C']

如果缺少两个,则:

  1. df['W_Sum'] = 0.5*df['A'] + 0.5*df['B']

有一种方法可以自动执行此过程,因为我不确定每个国家/地区的哪一列都会缺少值?

谢谢!

最佳答案
您可以为此使用np.where

  1. wa = 0.2*df.A + 0.4*df.B + 0.2*df.C
  2. df['new_col'] = np.where(df.isna().any(axis=1),df.mean(axis=1),wa)

 例

  1. df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,np.nan]})
  2. A B C
  3. 0 1 4 7.0
  4. 1 2 5 8.0
  5. 2 3 6 NaN
  6. wa = 0.2*df.A + 0.4*df.B + 0.2*df.C
  7. df['new_col'] = np.where(df.isna().any(axis=1),wa)
  8. A B C new_col
  9. 0 1 4 7.0 3.2
  10. 1 2 5 8.0 4.0
  11. 2 3 6 NaN 4.5

 细节

np.where将根据条件has_nans的结果在平均值或加权平均值中进行选择:

  1. df.assign(has_nans = df.isna().any(axis=1),mean=df.mean(axis=1),weighted_av = wa)
  2. A B C new_col has_nans mean weighted_av
  3. 0 1 4 7.0 3.2 False 3.80 3.2
  4. 1 2 5 8.0 4.0 False 4.75 4.0
  5. 2 3 6 NaN 4.5 True 4.50 NaN

猜你在找的Python相关文章