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

Pandas+sqldf如何计算50岁+男性、40岁+女性合计存活率

泰坦尼克数据集指定人群存活率计算方案

缺失值填充不生效的原因

  • 你之前拆分出df_Mr_survived、df_Mr_died等4个数据分片后单独做fillna操作,修改的只是分片数据,不会同步到原始的df_titanic表。后续统计查询是直接读取未处理缺失值的df_titanic,Age为空的记录会被WHERE条件直接过滤,最终统计结果会有偏差。
  • 正确的预处理方式是直接在原始数据集上完成Age字段填充,参考代码:
# 可根据需求替换为分组均值等其他填充逻辑
df_titanic["Age"] = df_titanic["Age"].fillna(df_titanic["Age"].mean())

填充完成后再执行sqldf查询,填充值就会正常生效。

单条查询计算合计存活率

你之前的查询只统计了符合条件的存活人数,缺少符合筛选条件的总人数统计,因此无法算出存活率占比。使用你已掌握的WHERE语法即可单条语句输出结果,不需要复杂操作:

存活率计算逻辑:指定人群的存活人数 / 指定人群总人数,计算时注意将分子转为浮点型,避免整数相除得到错误的整数结果。

total_survival_res = sqldf("""
SELECT
    SUM(CASE WHEN Survived = 1 THEN 1 ELSE 0 END) AS survived_total,
    COUNT(*) AS people_total,
    ROUND(
        CAST(SUM(CASE WHEN Survived = 1 THEN 1 ELSE 0 END) AS FLOAT) / COUNT(*),
        4
    ) AS total_survival_rate
FROM df_titanic
WHERE
    (Sex = 'male' AND Age >= 50)
    OR (Sex = 'female' AND Age >= 40)
""")

返回结果中total_survival_rate就是你需要的两类人群合计存活率,结果保留4位小数。

分群体计算存活率(使用GROUP BY/HAVING)

如果需要分别查看两类人群的各自存活率,可以用你熟悉的GROUP BY语法实现,需要筛选特定存活率的分组时追加HAVING条件即可:

group_survival_res = sqldf("""
SELECT
    CASE
        WHEN Sex = 'male' AND Age >= 50 THEN '50岁及以上男性'
        WHEN Sex = 'female' AND Age >= 40 THEN '40岁及以上女性'
    END AS group_name,
    SUM(CASE WHEN Survived = 1 THEN 1 ELSE 0 END) AS survived_total,
    COUNT(*) AS people_total,
    ROUND(
        CAST(SUM(CASE WHEN Survived = 1 THEN 1 ELSE 0 END) AS FLOAT) / COUNT(*),
        4
    ) AS group_survival_rate
FROM df_titanic
WHERE
    (Sex = 'male' AND Age >= 50)
    OR (Sex = 'female' AND Age >= 40)
GROUP BY group_name
-- 示例:如果只需要展示存活率高于50%的分组,取消下面一行注释即可
-- HAVING group_survival_rate > 0.5
""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:27:26