如何用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
相关产品推荐
相关产品推荐

