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

如何用Pandas生成年龄缺失值的性别双向对比表?

如何用Pandas分析不同性别群体的Age缺失值分布一致性?

嘿,这问题我熟,我来给你一步步拆解怎么用Pandas搞定这个缺失值分布对比的需求~

首先先还原你的示例数据,我们可以先把它构建成Pandas DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'ID': [1, 2, 3, 4, 5],
    'Age': [20, 40, 40, np.nan, 18],
    'Sex': [np.nan, 'F', 'M', 'M', np.nan]
})

你的需求是对比Male和Female群体中,Age字段有值/缺失的比例,生成类似双向对比表的结果。下面是具体实现步骤:

步骤1:筛选有效样本

原数据里有部分Sex字段为空的行,我们只关注明确标记为Male(M)和Female(F)的样本,先把这些行筛选出来:

filtered_df = df[df['Sex'].isin(['M', 'F'])].copy()

步骤2:标记Age是否存在

新增一列来标记每行的Age是否非空(也就是有没有有效值):

filtered_df['Has Age'] = filtered_df['Age'].notna()

步骤3:生成交叉计数表

用pd.crosstab来统计每个性别下,Age有值/缺失的数量:

cross_tab = pd.crosstab(filtered_df['Sex'], filtered_df['Has Age'], margins=False)
# 把默认的True/False列名改成你需要的名称
cross_tab.columns = ['Null age', 'Has Age']

步骤4:计算比例并调整格式

把计数转换成每行的比例(也就是每个性别内部的占比),再调整索引和列的顺序,让结果和你期望的一致:

# 按行归一化,计算每个性别下的比例
proportion_tab = cross_tab.div(cross_tab.sum(axis=1), axis=0)
# 把行索引改成你要的Male/Female
proportion_tab.index = ['Male', 'Female']
# 调整列的顺序为Has Age在前,Null age在后
proportion_tab = proportion_tab[['Has Age', 'Null age']]

最终结果

运行完上面的代码后,打印proportion_tab就能得到你想要的双向对比表:

Has Age  Null age
Male         0.5       0.5
Female       1.0       0.0

这个结果对应你的数据:Male群体有2个样本,其中一半有Age值、一半缺失;Female群体只有1个样本,Age是完整的,所以缺失比例为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:03:23