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

如何使用pandas聚合分组指标并绘制泰坦尼克号幸存者年龄分布饼图

问题原因
  • 泰坦尼克数据集的Age字段存在177条缺失值,groupby操作默认会自动过滤含有空值的分组,这部分数据直接被排除在统计之外,导致最终统计的总人数远低于891
  • 你在完成年龄分箱后没有再次按年龄组、存活状态两个维度做聚合统计,当前输出的142行是不同年龄值+存活状态的组合数,不是你需要的年龄维度的统计结果
修正后代码
import pandas as pd
import seaborn as sns  

# 加载泰坦尼克测试数据集
df_t = sns.load_dataset('titanic')
# 统一列名首字母大写
df_t.columns = df_t.columns.str.title()

def get_num_people_by_age_category(df):
    # 年龄分箱,包含边界值避免0岁、100岁等极端值被归为NaN
    df["age_group"] = pd.cut(
        x=df['Age'], 
        bins=[0,18,60,100], 
        labels=["青少年", "中年", "老年"],
        include_lowest=True
    )
    # 可选操作:将年龄缺失的样本单独归为未知组,避免数据丢失
    df["age_group"] = df["age_group"].cat.add_categories("年龄未知").fillna("年龄未知")
    # 按年龄组、存活状态聚合统计人数
    group_result = df.groupby(['age_group', 'Survived'], as_index=False).size()
    return group_result

# 调用函数获取统计结果
stat_df = get_num_people_by_age_category(df_t)
print(stat_df)

# 提取幸存者各年龄组人数,可直接用于绘制饼图
survived_stat = stat_df[stat_df["Survived"] == 1]
补充说明
  • 如果不需要保留年龄缺失的样本,可在分箱前执行df = df.dropna(subset=["Age"])过滤空值,统计结果总人数会和Age列非空的样本数一致
  • 聚合后的size字段就是对应分组的人数,直接取该字段和age_group字段即可绘制饼图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:04