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

如何将pandas DataFrame的NaN值替换为各年份对应列的中位数

操作方法

你可以先把数值列转换为标准浮点型,再按年份分组计算各列中位数填充NaN即可,具体代码及说明如下:

import pandas as pd

# 若你的数据中A/B/C列已经是数值类型,可跳过第一步的格式转换
# 第一步:清洗示例中带千位分隔符的数值,转换为标准浮点型
for col in ["A", "B", "C"]:
    # 移除多余的千位分隔小数点,仅保留最后一个小数点位
    df[col] = df[col].str.replace(r'\.(?=.*\.)', '', regex=True).astype(float)

# 第二步:按年份分组,用对应年份各列的横截面中位数填充NaN
df[["A", "B", "C"]] = df.groupby("year")[["A", "B", "C"]].transform(
    lambda x: x.fillna(x.median())
)
  • 核心逻辑是通过groupby('year')将面板数据拆分为各年份的横截面数据
  • transform方法会保留原数据的行索引顺序,不会打乱原数据的结构,将每个年份对应列的中位数填充到该列该年份的NaN位置
  • 若存在某一年某一列全为NaN的极端情况,填充后该位置仍为NaN,你可以根据需求额外补充逻辑处理该边界场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:03