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

如何在pandas DataFrame中将符合条件的对应行指定列值替换为NaN

问题原因

你当前的代码逻辑与axis参数无关,错误核心是replace方法的使用不符合需求:replace(0, np.nan)会遍历整个DataFrame的所有单元格,仅将值等于0的内容替换为NaN。你的x列取值都是三位数不存在0值,自然不会被修改,计算x列均值时用的还是全量数据,得到的当然是整体均值。

解决方案

方案1:groupby直接分组计算(推荐)

不需要修改原数据,一行代码即可得到不同group对应的x列均值:

import pandas as pd
import numpy as np

normalData = pd.read_csv('NormalSample.csv')
# 按group列分组后计算x列的均值
group_x_mean = normalData.groupby('group')['x'].mean()
print(group_x_mean)

运行后会直接输出如下格式的结果:

group
0    169.5
1    307.0
Name: x, dtype: float64

方案2:布尔索引筛选子集后计算

如果需要单独获取某一个group的均值,可以用条件筛选行之后再计算:

# 计算group为0的x列均值
mean_g0 = normalData[normalData['group'] == 0]['x'].mean()
# 计算group为1的x列均值
mean_g1 = normalData[normalData['group'] == 1]['x'].mean()

方案3:按需求替换NaN后计算(对应你原来的思路调整)

如果你坚持要用替换为NaN后求均值的逻辑,需要将不需要计算的行的x列值设为NaN,而不是仅修改group列:

# 计算group为0的均值:把group不等于0的行的x值设为NaN
normalData.loc[normalData['group'] != 0, 'x'] = np.nan
print(normalData['x'].mean())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:48:03