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

