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

pandas中用groupby字典填充列NaN未生效问题排查

填充失败核心原因
  • 生成的字典结构不符合预期:对groupby聚合输出的DataFrame直接调用to_dict(),得到的是双层嵌套字典,格式为{'cylinders': {车型名1: 中位数1, 车型名2: 中位数2}},不是{车型名: 对应中位数}的单层映射结构。
  • fillna逻辑用错:对df['cylinders']这个Series调用fillna传入字典时,pandas会按照Series自身的行索引匹配字典键,不会自动关联model列的取值做匹配,自然无法完成对应填充。
正确实现代码
  1. 生成分组中位数单层映射字典
# 分组后直接取cylinders列得到Series,转字典后就是车型为键、中位数为值的单层结构
cylinders_model_med = df.groupby('model')['cylinders'].median().to_dict()
  1. 按model列匹配中位数完成空值填充
# 先用map把每行model对应的中位数取出来,再传入fillna完成填充
df['cylinders'] = df['cylinders'].fillna(df['model'].map(cylinders_model_med))
  1. 校验填充结果
# 输出剩余空值数量
print(df['cylinders'].isna().sum())
补充说明

如果存在某款车型的所有cylinders记录都是空值的情况,该车型映射得到的中位数也为NaN,填充后这部分记录仍为空。可以追加一行全局填充兜底:

# 用全量数据的气缸数中位数填充剩余空值,也可以根据需求换成众数、固定值等
df['cylinders'] = df['cylinders'].fillna(df['cylinders'].median())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:24:15