首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取dataframe中大于或等于零的行数平均值

获取dataframe中大于或等于零的行数平均值
EN

Stack Overflow用户
提问于 2017-05-31 03:19:43
回答 2查看 3.6K关注 0票数 3

我想要获得数据帧中一行的平均值,其中我只使用大于或等于零的值。

例如:如果我的数据帧看起来像这样:

代码语言:javascript
运行
复制
df = pd.DataFrame([[3,4,5], [4,5,6],[4,-10,6]])
    3   4   5
    4   5   6
    4   -10 6

目前,如果我得到我写的行的平均值:

代码语言:javascript
运行
复制
df['mean'] = df.mean(axis = 1)

并获取:

代码语言:javascript
运行
复制
3   4   5   4
4   5   6   5
4   -10 6   0

我想得到一个只使用大于零的值来计算平均值的数据帧。我想要一个数据帧,看起来像:

代码语言:javascript
运行
复制
3   4   5   4
4   5   6   5
4   -10 6   5

在上面的例子中,平均值中不包括-10。是否有排除-10的命令?

EN

回答 2

Stack Overflow用户

发布于 2017-05-31 03:24:02

可以在计算平均值之前使用df[df > 0]查询数据框;df[df > 0]将返回一个数据框,其中小于或等于零的像元将被NaN替换并在计算mean时被忽略

代码语言:javascript
运行
复制
df[df > 0].mean(1)

#0    4.0
#1    5.0
#2    5.0
#dtype: float64
票数 6
EN

Stack Overflow用户

发布于 2017-05-31 03:37:10

并不像@Psidom那样简洁。但是如果你想使用numpy并获得更快的速度。

代码语言:javascript
运行
复制
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

定时

小数据

代码语言:javascript
运行
复制
%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 loop
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44270272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档