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

如何简化泰坦尼克数据集按舱位计算生存百分比的实现?

简化泰坦尼克数据集舱位生存百分比计算流程

问题描述

我有经典的泰坦尼克数据集,示例数据如下:

fr1 = pd.DataFrame({
"class": ["1", "2", "2"],
"survived": [0, 1, 1]})

我需要计算每个舱位的人员生存百分比,目前的实现是先通过掩码拆分数据,再分组统计:

# 注:原代码存在列名大小写不一致问题,此处修正以匹配示例数据的列名
fr2 = fr1[fr1["survived"] == 0]
fr2 = fr2.groupby("class", as_index=False)["survived"].agg(["count"])
fr3 = fr1[fr1["survived"] == 1]
fr3 = fr3.groupby("class", as_index=False)["survived"].agg(["count"])

之后合并结果并创建百分比列:

merged = pd.merge(fr2,fr3,left_index=True,right_index=True)
merged.columns = "Survived Died".split()    
merged["Percentage"] = merged["Survived"] / (len(fr1))*100

请问怎么简化这个流程?

简化实现方案

直接利用pandas的分组聚合、透视表或交叉表功能,无需拆分合并数据集,一步完成统计计算,以下是几种实用方法:

方法1:用groupby+value_counts快速算占比

如果要计算每组舱位内的生存百分比:

# 按舱位分组,统计生存/死亡的占比,转成宽表格式
survival_stats = fr1.groupby('class')['survived'].value_counts(normalize=True).unstack(fill_value=0)
# 重命名列并转成百分比
survival_stats = survival_stats.rename(columns={1: 'Survived_Pct', 0: 'Died_Pct'}) * 100

如果要计算相对总数据集的生存百分比:

# 按舱位统计生存人数、总人数
class_stats = fr1.groupby('class')['survived'].agg(['sum', 'count'])
# 计算百分比
class_stats['Survived_Pct'] = (class_stats['sum'] / len(fr1)) * 100
class_stats = class_stats.rename(columns={'sum': 'Survived_Count', 'count': 'Total_Count'})

方法2:用pivot_table生成透视表一步到位

# 生成舱位×生存状态的透视表,统计人数
pivot_stats = fr1.pivot_table(
    index='class',
    columns='survived',
    aggfunc='size',
    fill_value=0
)
# 重命名列并计算总人数占比
pivot_stats.columns = ['Died_Count', 'Survived_Count']
pivot_stats['Survived_Pct'] = (pivot_stats['Survived_Count'] / len(fr1)) * 100

方法3:用crosstab快速生成交叉统计

# 生成舱位与生存状态的交叉表
cross_stats = pd.crosstab(fr1['class'], fr1['survived'], fill_value=0)
# 重命名列并计算百分比
cross_stats.columns = ['Died_Count', 'Survived_Count']
cross_stats['Survived_Pct'] = (cross_stats['Survived_Count'] / len(fr1)) * 100

这些方法都省去了拆分、合并数据集的步骤,代码更简洁,也避免了原代码中列名不一致的潜在错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:26