Pandas DataFrame 中列的加权均值,包括 Nan
Weighted Means for columns in Pandas DataFrame including Nan
我正在尝试获取权重为 "Value" 的 Pandas.Dataframe 的每一列 (A-F) 的加权平均值。我只能找到类别问题的解决方案,这不是我需要的。
正常均值的可比解是
df.means()
注意 df 的列中有 Nan 和 "Value"。
A B C D E F Value
0 17656 61496 83 80 117 99 2902804
1 75078 61179 14 3 6 14 3761964
2 21316 60648 86 Nan 107 93 127963
3 6422 48468 28855 26838 27319 27011 131354
4 12378 42973 47153 46062 46634 42689 3303909572
5 54292 35896 59 6 3 18 27666367
6 21272 Nan 126 12 3 5 9618047
7 26434 35787 113 17 4 8 309943
8 10508 34314 34197 7100 10 10 NaN
我可以将其用于单列。
df1 = df[['A','Value']]
df1 = df1.dropna()
np.average(df1['A'], weights=df1['Value'])
必须有一个简单的方法。快把我逼疯了,我没看到。
如有任何帮助,我将不胜感激。
您可以使用屏蔽数组。我们可以删除 Value
列具有 NaN
值的行。
In [353]: dff = df.dropna(subset=['Value'])
In [354]: dff.apply(lambda x: np.ma.average(
np.ma.MaskedArray(x, mask=np.isnan(x)), weights=dff.Value))
Out[354]:
A 1.282629e+04
B 4.295120e+04
C 4.652817e+04
D 4.545254e+04
E 4.601520e+04
F 4.212276e+04
Value 3.260246e+09
dtype: float64
我正在尝试获取权重为 "Value" 的 Pandas.Dataframe 的每一列 (A-F) 的加权平均值。我只能找到类别问题的解决方案,这不是我需要的。
正常均值的可比解是
df.means()
注意 df 的列中有 Nan 和 "Value"。
A B C D E F Value
0 17656 61496 83 80 117 99 2902804
1 75078 61179 14 3 6 14 3761964
2 21316 60648 86 Nan 107 93 127963
3 6422 48468 28855 26838 27319 27011 131354
4 12378 42973 47153 46062 46634 42689 3303909572
5 54292 35896 59 6 3 18 27666367
6 21272 Nan 126 12 3 5 9618047
7 26434 35787 113 17 4 8 309943
8 10508 34314 34197 7100 10 10 NaN
我可以将其用于单列。
df1 = df[['A','Value']]
df1 = df1.dropna()
np.average(df1['A'], weights=df1['Value'])
必须有一个简单的方法。快把我逼疯了,我没看到。
如有任何帮助,我将不胜感激。
您可以使用屏蔽数组。我们可以删除 Value
列具有 NaN
值的行。
In [353]: dff = df.dropna(subset=['Value'])
In [354]: dff.apply(lambda x: np.ma.average(
np.ma.MaskedArray(x, mask=np.isnan(x)), weights=dff.Value))
Out[354]:
A 1.282629e+04
B 4.295120e+04
C 4.652817e+04
D 4.545254e+04
E 4.601520e+04
F 4.212276e+04
Value 3.260246e+09
dtype: float64