如何使用Pandas iloc计算DataFrame每行的非零值条件均值
问题描述
现有如下结构的DataFrame(实际包含更多列):
Customer Group1 jan_revenue feb_revenue mar_revenue Sam Bank A 40 50 0 Wilson Bank A 60 70 30 Jay Bank B 10 40 40 Jim Bank A 0 40 70 Yan Bank C 0 40 90 Tim Bank C 10 0 50
需求为:为每位客户计算收入列的均值,但仅计算非零值(例如Sam的均值为(40+50)/2=45,Wilson的均值为(60+70+30)/3≈53.3333)。
由于收入列数量较多,已使用iloc选中目标列,但当前代码会包含0值计算均值:
df['avg_revenue21'] = df.iloc[:,27:39].mean(axis=1)
需要实现使用iloc的同时,仅对非零值计算均值。
解决方案
核心思路是将0值转换为缺失值(NaN),利用pandas的mean方法默认跳过缺失值的特性,结合iloc完成需求,以下是两种可行方式:
方法一:使用where替换0为NaN
# 选中目标列,将0值替换为NaN后计算均值 df['avg_revenue21'] = df.iloc[:,27:39].where(df.iloc[:,27:39] != 0).mean(axis=1)
where方法会保留满足条件(非零)的值,不满足的设为NaN,后续mean会自动忽略NaN计算均值。
方法二:使用replace替换0为NaN
import numpy as np # 替换0为NaN后计算均值 df['avg_revenue21'] = df.iloc[:,27:39].replace(0, np.nan).mean(axis=1)
这种方式需要导入numpy,直接将目标列中的所有0值替换为NaN,再调用mean完成计算。
两种方法都能高效实现需求,且保留了iloc批量选中列的逻辑。
内容的提问来源于stack exchange,提问作者Jyc
相关产品推荐
相关产品推荐

