You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在计算DataFrame行均值时排除小于等于0的值?

如何计算DataFrame每行仅大于0的值的均值?

问题场景

给定如下DataFrame:

import pandas as pd

df_dict={'A':[0,2,10,0],'B':[10,0,30,40],'C':[0,5,10,10]}
df=pd.DataFrame(df_dict)

输出的DataFrame为:

A   B   C
0  0  10   0
1  2   0   5
2 10  30  10
3  0  40  10

使用常规的df.mean(axis=1)会将所有值(包括0)纳入计算,得到结果:

df.mean(axis=1)
# 输出:
# 0     3.333333
# 1     2.333333
# 2    16.666667
# 3    16.666667
# dtype: float64

但需求是计算每行均值时忽略所有≤0的值,预期结果为:

  • 第0行:10/1 = 10.0
  • 第1行:(2+5)/2 = 3.5
  • 第2行:(10+30+10)/3 ≈ 16.6667
  • 第3行:(40+10)/2 = 25.0

解决方案

方法1:用where替换非符合条件的值为NaN后计算均值

利用pandas的where方法将≤0的值替换为NaN,而mean()默认会忽略NaN,直接计算行均值:

result = df.where(df > 0).mean(axis=1)
print(result)

输出结果:

0    10.000000
1     3.500000
2    16.666667
3    25.000000
dtype: float64

方法2:手动统计总和与个数后计算

分别统计每行大于0的值的总和与数量,再做除法运算:

# 计算每行大于0的值的总和
row_sum = df[df > 0].sum(axis=1)
# 计算每行大于0的值的个数
row_count = (df > 0).sum(axis=1)
# 计算均值
result = row_sum / row_count
print(result)

此方法输出结果与方法1完全一致,逻辑更直观,适合需要单独查看总和或个数的场景。


内容的提问来源于stack exchange,提问作者roudan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:25:12