加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 17:37:33 所属栏目:Python 来源:网络整理
导读:我有一个熊猫数据框,其中有不同的国家(行)和4个指标(列)A,B,C和D. 对于每个指标,我都有一个特定的权重用于计算其加权总和,比如说:Weigth_A = 0.2,Weigth_B = 0.2,Weight_C = 0.4,Weight_D = 0.2 这是我的加权总和的公式 df['W_Sum'] = Weigth_A*df['A'] + W

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

这是我的加权总和的公式

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

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

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

如果缺少两个,则:

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

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

谢谢!

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

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

?例

df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,np.nan]})

   A  B    C  
0  1  4  7.0      
1  2  5  8.0      
2  3  6  NaN      

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

   A  B    C  new_col
0  1  4  7.0      3.2
1  2  5  8.0      4.0
2  3  6  NaN      4.5

?细节

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

df.assign(has_nans = df.isna().any(axis=1),mean=df.mean(axis=1),weighted_av = wa)

   A  B    C  new_col  has_nans  mean  weighted_av
0  1  4  7.0      3.2     False  3.80          3.2
1  2  5  8.0      4.0     False  4.75          4.0
2  3  6  NaN      4.5      True  4.50          NaN

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读