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

如何用Pandas交叉表替换DataFrame中Age列的NaN值

用Pandas分组交叉统计填充Age缺失值的解决方案

嘿,作为Pandas新手碰到缺失值填充的问题太正常啦!我帮你用Pclass和Sex的交叉分组统计来做这个查找表,完美解决Age列的NaN填充问题,步骤超清晰:

核心思路

我们可以基于Pclass(舱位等级)和Sex(性别)的组合,计算每个分组下Age的统计值(中位数/均值),把这个结果作为填充缺失值的查找表,精准匹配到对应乘客身上。

方法一:分步实现(适合理解逻辑)

  1. 创建分组统计的查找表
    先按Pclass和Sex分组,计算每组Age的中位数(比均值更稳健,不受极端值影响):

    # 生成每个Pclass-Sex组合的Age中位数,作为填充参考
    age_lookup = df.groupby(['Pclass', 'Sex'])['Age'].median().reset_index()
    # 如果想要交叉表的可视化格式,可以用这个:
    # age_crosstab = pd.crosstab(df['Pclass'], df['Sex'], values=df['Age'], aggfunc='median')
    
  2. 匹配查找表并填充缺失值
    把查找表和原DataFrame合并,用对应分组的中位数替换Age的NaN:

    # 合并原数据和查找表,按Pclass、Sex匹配
    df_merged = df.merge(age_lookup, on=['Pclass', 'Sex'], suffixes=('', '_fill'), how='left')
    # 填充NaN值
    df_merged['Age'] = df_merged['Age'].fillna(df_merged['Age_fill'])
    # 删除临时生成的填充列
    df_merged.drop('Age_fill', axis=1, inplace=True)
    # 最后把结果赋值回原df(或者直接用df_merged)
    df = df_merged
    

方法二:一行代码搞定(高效简洁)

用groupby + transform可以直接完成分组填充,不用手动合并表,新手也能快速上手:

# 自动按Pclass和Sex分组,用每组的中位数填充该组内的Age缺失值
df['Age'] = df.groupby(['Pclass', 'Sex'])['Age'].transform(lambda x: x.fillna(x.median()))

小提示

  • 如果更倾向用均值填充,把代码里的median()换成mean()就行;
  • 你可以打印age_lookup看看每个分组的填充值,确认是否符合预期;
  • 这个方法的优势是精准匹配乘客的舱位和性别,比全局填充更合理哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:48:30