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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:29