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

