Pandas 加权平均-如果值或权重中缺少数据,则忽略数据

Pandas 加权平均-如果值或权重中缺少数据,则忽略数据,pandas,missing-data,weighted-average,Pandas,Missing Data,Weighted Average,我有这样的代码 >>> import pandas as pd >>> import numpy as np >>> >>> df1 = pd.DataFrame({'value':[10,20,np.nan,40], ... 'weight':[1,np.nan,3,4]}) >>> df1 value weight 0 10.0 1

我有这样的代码

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> df1 = pd.DataFrame({'value':[10,20,np.nan,40],
...                         'weight':[1,np.nan,3,4]}) 
>>> df1
   value  weight
0   10.0     1.0
1   20.0     NaN
2    NaN     3.0
3   40.0     4.0
>>> (df1["value"] * df1["weight"]).sum() / df1["weight"].sum()
21.25
如果缺少值或权重,我想从计算中省略数据。i、 我想要加权平均值 (10*1+40*4)/(1+4)=34


如果可以在熊猫中使用单个表达式,请提供帮助

您可以首先使用筛选,掩码由和创建,用于检查每行的所有
True
值:

df1 = df1[df1.notnull().all(axis=1)]
print (df1)
   value  weight
0   10.0     1.0
3   40.0     4.0

df2 = (df1["value"] * df1["weight"]).sum() / df1["weight"].sum()
print (df2)
34.0
或者分别检查两列:

df1 = df1[df1["value"].notnull() & df1["weight"].notnull()]
print (df1)
   value  weight
0   10.0     1.0
3   40.0     4.0
更简单的解决方案包括:

如有必要,请指定列:

df1 = df1.dropna(subset=['value','weight'])
print (df1)
   value  weight
0   10.0     1.0
3   40.0     4.0
df1 = df1.dropna(subset=['value','weight'])
print (df1)
   value  weight
0   10.0     1.0
3   40.0     4.0