python - 如何找到基于权重的定制平均值,包括处理 pandas 中的 nan 值?

标签 python pandas numpy dataframe data-science

我有一个数据框 df_ss_g 作为

ent_id,WA,WB,WC,WD
123,0.045251836,0.614582906,0.225930615,0.559766482
124,0.722324239,0.057781167,,0.123603561
125,,0.361074325,0.768542766,0.080434134
126,0.085781742,0.698045853,0.763116684,0.029084545
127,0.909758657,,0.760993759,0.998406211
128,,0.32961283,,0.90038336
129,0.714585519,,0.671905291,
130,0.151888772,0.279261613,0.641133263,0.188231227

现在我必须计算基于权重的平均值(AVG_WEIGHTAGE),即 =(WA*0.5+WB*1+WC*0.5+WD*1)/(0.5+1+0.5+1 )

但是当我使用下面的方法计算它时,即

df_ss_g['AVG_WEIGHTAGE']= df_ss_g.apply(lambda x:((x['WA']*0.5)+(x['WB']*1)+(x['WC']*0.5)+(x['WD']*1))/(0.5+1+0.5+1) , axis=1)

IT 输出,即对于 NaN 值,它将 NaN 作为 AVG_WEIGHTAGE 指定为 null,这是错误的。 enter image description here

我想要的只是分母和分子中不应该考虑 null 例如

ent_id,WA,WB,WC,WD,AVG_WEIGHTAGE
128,,0.32961283,,0.90038336,0.614998095   i.e. (WB*1+WD*1)/1+1
129,0.714585519,,0.671905291,,0.693245405 i.e. (WA*0.5+WC*0.5)/0.5+0.5

最佳答案

IIUC:

import numpy as np

weights = np.array([0.5, 1, 0.5, 1]))
values = df.drop('ent_id', axis=1)

df['AVG_WEIGHTAGE'] = np.dot(values.fillna(0).to_numpy(), weights)/np.dot(values.notna().to_numpy(), weights)


df['AVG_WEIGHTAGE']
0    0.436647
1    0.217019
2    0.330312
3    0.383860
4    0.916891
5    0.614998
6    0.693245
7    0.288001

关于python - 如何找到基于权重的定制平均值,包括处理 pandas 中的 nan 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63344888/

相关文章:

Python:使用 lambda 过滤列表

python - 使用 h5py 读取 HDF5 文件时使用 python 切片对象?

python - 调用 check 两次应该工作吗?

python - Pandas ---> 每个组元素需要一个索引

python - Foursquare API 请求在版本参数上返回错误

python - Pandas 中按月份和任意属性求和和绘图

python - 缺失元素的向量求和

python - 将时间序列转换为图像矩阵

python - 如何准确地以编程方式复制粘贴内容?

python - 如何将裁剪应用于 TensorFlow 中的可训练变量