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

pandas如何用.mean(axis=1)得到含NaN值的目标行均值

问题背景

现有基于numpy、pandas编写的测试代码,构建的DataFrame中2021列存在np.NaN空值,通过两种不同逻辑计算行均值,代码如下:

import numpy as np
import pandas as pd
    
GFG_dict = { '2019': [10,20,30,40],'2020': [20,30,40,50],'2021': [30, np.NaN, np.NaN, 60],'2022':[40,50,60,70]}
    
gfg = pd.DataFrame(GFG_dict)
    
gfg['mean1'] = gfg.mean(axis = 1)
gfg['mean2'] = gfg.loc[:,'2019':'2022'].sum(axis = 1)/4
gfg

两种均值的计算逻辑差异:

  • mean1:调用默认参数的.mean(axis=1)计算,运行时自动跳过NaN值,以每行非空值的数量作为分母求平均
  • mean2:对2019-2022列按行求和后除以固定列数4,空值不参与分子求和,分母固定为总列数

需求为直接使用.mean(axis=1)方法得到与mean2列完全一致的计算结果。

实现方法

pandas默认的.mean(axis=1)会自动跳过NaN值,分母取每行实际非空的数值个数,因此和固定除以4的mean2结果存在差异。
要直接用.mean(axis=1)得到和mean2完全一致的结果,只需要在计算均值前将目标列范围内的NaN填充为0再计算即可。NaN被替换为0后不会改变分子求和结果,同时每行所有列都计为非空,分母自然固定为4,和sum(axis=1)/4的逻辑完全等价。
实现代码如下:

# 仅针对2019-2022列范围计算,空值填充为0后求行均值
gfg['mean3'] = gfg.loc[:, '2019':'2022'].fillna(0).mean(axis=1)

运行后可验证结果完全匹配:

  • 索引1行数值为20、30、NaN、50,填0后求和为100,除以4得25,和mean2结果一致
  • 索引2行数值为30、40、NaN、60,填0后求和为130,除以4得32.5,和mean2结果一致
  • 其余无空值的行,填充0不影响计算结果,和mean2完全相同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:33:20