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

如何通过双索引groupby均值映射填充DataFrame收入列的NA缺失值

双索引分组均值填充空值实现方法

你原来的写法无法生效的核心原因是:map仅支持单值映射,双索引聚合结果的键是(income_type, education)格式的元组,需要先完成行维度的双字段匹配对齐才能填充。

下面是两种可直接落地的实现方案:

方案1:groupby.transform 一步完成(最简洁)

如果不需要单独留存分组均值结果,直接用transform方法即可自动对齐原DataFrame的索引,不需要额外处理映射关系:

df['total_income'] = df['total_income'].fillna(
    df.groupby(['income_type', 'education'])['total_income'].transform('mean')
)

transform会把分组聚合得到的均值,自动按分组规则还原成和原DataFrame行数一致的序列,空值位置会自动匹配对应分组的均值填充。

方案2:复用已计算好的双索引均值

如果你已经提前计算好了income_means这个双索引聚合结果,可以通过构造元组索引完成匹配:

# 若你的income_means是带多级列名的DataFrame,先执行这行转为双索引Series
# income_means = income_means.droplevel(0, axis=1).squeeze()

# 构造双字段元组匹配映射,填充空值
fill_dict = income_means.to_dict()
df['total_income'] = df['total_income'].fillna(
    df.set_index(['income_type', 'education']).index.map(fill_dict)
)

注意事项

  • 匹配前需要确保income_type、education两个分组字段没有空值,否则会出现匹配失败的情况,如果这两个字段存在空值,建议先填充为统一的默认分类(如未知)后再做分组聚合和匹配。
  • 如果存在某组(income_type, education)的所有样本total_income都为空的情况,该组的均值也会为空,填充后对应位置仍会保留空值,需要提前做好异常分支处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:00