我正在尝试计算Python中三列的平均值。这里是捕捉-如果我的3列的所有3个行值都不是null,那么我的平均值将是(x+y+z)/3。
如果我其中一个行值为空(假设z),那么我的平均值应该是(x+y)/2。
我将这些平均值存储在一个单独的列中,该列是pandas数据帧的一部分。
我正在寻找最好的方法,因为我的数据集有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
发布于 2018-06-23 04:44:24
只需沿轴0
(列)应用numpy.nanmean
函数即可。这是默认轴,因此您将获得与省略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
https://stackoverflow.com/questions/50995152
复制相似问题