我想要获得数据帧中一行的平均值,其中我只使用大于或等于零的值。
例如:如果我的数据帧看起来像这样:
df = pd.DataFrame([[3,4,5], [4,5,6],[4,-10,6]])
3 4 5
4 5 6
4 -10 6目前,如果我得到我写的行的平均值:
df['mean'] = df.mean(axis = 1)并获取:
3 4 5 4
4 5 6 5
4 -10 6 0我想得到一个只使用大于零的值来计算平均值的数据帧。我想要一个数据帧,看起来像:
3 4 5 4
4 5 6 5
4 -10 6 5在上面的例子中,平均值中不包括-10。是否有排除-10的命令?
发布于 2017-05-31 03:24:02
可以在计算平均值之前使用df[df > 0]查询数据框;df[df > 0]将返回一个数据框,其中小于或等于零的像元将被NaN替换并在计算mean时被忽略
df[df > 0].mean(1)
#0 4.0
#1 5.0
#2 5.0
#dtype: float64发布于 2017-05-31 03:37:10
并不像@Psidom那样简洁。但是如果你想使用numpy并获得更快的速度。
v0 = df.values
v1 = np.where(v0 > 0, v0, np.nan)
v2 = np.nanmean(v1, axis=1)
df.assign(Mean=v2)
0 1 2 Mean
0 3 4 5 4.0
1 4 5 6 5.0
2 4 -10 6 5.0定时
小数据
%timeit df.assign(Mean=df[df > 0].mean(1))
1000 loops, best of 3: 1.71 ms per loop
%%timeit
v0 = df.values
v1 = np.where(v0 > 0, v0, np.nan)
v2 = np.nanmean(v1, axis=1)
df.assign(Mean=v2)
1000 loops, best of 3: 407 µs per loophttps://stackoverflow.com/questions/44270272
复制相似问题