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

如何用Pandas将Fare列除以Ticket列对应值的出现次数?

泰坦尼克号单人票价计算解决方案

实现思路

要将Fare列的总费用转换为单人费用,只需对每个Ticket分组统计条目数(同票号乘客数),再将对应Fare除以该数值。使用Pandas的groupby.transform方法可以直接为每行返回对应分组的大小,避免手动处理字典时容易出现的unhashable object错误。

完整代码示例

import pandas as pd

# 加载数据集
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')

# 生成每个Ticket对应的乘客数量,返回与原数据行数一致的Series
ticket_passenger_count = df.groupby('Ticket')['Ticket'].transform('count')

# 计算单人票价,存入新列
df['Individual_Fare'] = df['Fare'] / ticket_passenger_count

# 若需覆盖原Fare列,执行以下代码
# df['Fare'] = df['Fare'] / ticket_passenger_count

# 查看结果样例
print(df[['Ticket', 'Fare', 'Individual_Fare']].head())

错误原因分析

你之前用字典或value_counts()时出现unhashable object错误,大概率是因为错误地将Series对象作为字典的键或映射依据。比如直接用df['Ticket'].map(df['Ticket'].value_counts())虽然看似可行,但如果代码中不小心传递了未正确处理的Series(而非其索引值),就会触发哈希错误。而groupby.transform是更可靠的方式,它会自动为每行匹配对应分组的统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:34:55