我正在尝试计算Python中3个三列的平均值。这里是要抓住的地方- 如果我的3列的所有3行值都不为null,那么我的平均值将为(x + y + z)/ 3。
如果我的行值之一为空(假设z),则我的平均值应为(x + y)/ 2。
我将平均值存储在熊猫数据框一部分的单独列中。
我正在寻找最好的方法,因为我的数据集有超过200万行。 我的数据如下。
谢谢。
A B C
0 1 2 3 # = (1+2+3)/3 = 2
1 4 NaN 6 # = (4+6)/2 = 5
2 NaN 8 9 # = (8+9)/2 = 8.5
答案 0 :(得分:0)
只需沿轴numpy.nanmean
(列)应用0
函数。这是默认轴,因此省略axis = 0
将获得相同的结果。如果要按行使用均值,请使用axis = 1
:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'a': [2.3, 4.5, 2.1, np.nan, 6.7],
'b': [2.4, 5.6, np.nan, np.nan, 7.1],
'c': [np.nan, np.nan, np.nan, np.nan, 0.9]
})
colmeans = df.apply(np.nanmean, axis = 0)
# colmeans
# a 3.900000
# b 5.033333
# c 0.900000
# dtype: float64
rowmeans = df.apply(np.nanmean, axis = 1)
# 0 2.35
# 1 5.05
# 2 2.10
# 3 NaN
# 4 4.90
# dtype: float64