如何在计算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
相关产品推荐
相关产品推荐

