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