
本文介绍如何使用pandas对《幸存者》参赛者数据进行科学去重与频次统计:先按“姓名+赛季”组合剔除同一人单季多次登场的冗余记录,再统计每人实际参与的不同赛季数量,最终精准识别参与季数最多的选手。
本文介绍如何使用pandas对《幸存者》参赛者数据进行科学去重与频次统计:先按“姓名+赛季”组合剔除同一人单季多次登场的冗余记录,再统计每人实际参与的不同赛季数量,最终精准识别参与季数最多的选手。
在分析《幸存者》(Survivor)这类真人秀节目的参赛者活跃度时,一个常见误区是直接对castaway_id或full_name做简单计数——这会导致错误结果。例如,某位选手在某一季中因规则原因被重复录入多次(如重返部落、复活赛等),若未剔除同季重复项,其“参赛季数”将被高估。正确做法是:以“选手身份 + 赛季”为唯一维度去重,再统计每人覆盖的独立赛季数。
✅ 正确处理流程
- 合并基础信息:确保castaways(含赛季、选手ID等)与castaway_details(含姓名、性别等)通过castaway id关联;
- 构建去重键:使用['full_name', 'season_name'](或['castaway_id', 'season'])作为去重依据;
- 执行去重:调用.drop_duplicates(subset=[...], keep='first')保留每组首条记录(语义更清晰,keep='last'亦可,需保持一致);
- 聚合统计:对去重后数据按选手分组,统计nunique()个不同赛季;
- 获取最高频选手:按赛季数降序排序,取首位。
? 示例代码(可直接运行)
import pandas as pd
# 模拟原始 castaways 数据:选手可能在同季多次出现
df_castaways = pd.DataFrame({
'full_name': ['Jane Smith', 'Jane Smith', 'Karen Lee', 'Karen Lee', 'Karen Lee', 'Tom Reed'],
'season_name': ['Survivor: Borneo', 'Survivor: Borneo', 'Survivor: Heroes vs. Villains',
'Survivor: Winners at War', 'Survivor: Winners at War', 'Survivor: Pearl Islands']
})
# Step 1: 去除同一选手在同季的重复记录
df_unique_seasons = df_castaways.drop_duplicates(
subset=['full_name', 'season_name'],
keep='first'
).reset_index(drop=True)
# Step 2: 统计每位选手参与的不同赛季数量
season_counts = df_unique_seasons.groupby('full_name')['season_name'].nunique().sort_values(ascending=False)
# Step 3: 获取最高频选手(含并列情况)
max_seasons = season_counts.max()
top_contestants = season_counts[season_counts == max_seasons].index.tolist()
print("✅ 去重后数据:")
print(df_unique_seasons)
print("\n? 每位选手参与的独立赛季数:")
print(season_counts)
print(f"\n? 参赛季数最多({max_seasons}季)的选手:{', '.join(top_contestants)}")⚠️ 关键注意事项
- 避免使用 value_counts().idxmax() 直接索引原始表:该方法未考虑“同季重复”,会返回原始数据中出现次数最多的ID,而非真实参与季数最多的选手;
- 优先使用 full_name + season_name 组合去重:比仅依赖 castaway_id 更鲁棒(ID可能因数据清洗不一致而重复);
- 若存在姓名拼写差异(如缩写/空格),建议预处理标准化姓名(如 .str.strip().str.title());
- keep='first' vs keep='last':二者在去重逻辑上等价,但为保证可复现性,建议显式指定并统一规范;
- 扩展分析建议:可进一步关联 castaway_details 表获取性别、年龄等维度,做交叉统计(如“女性选手最高参赛季数”)。
通过以上方法,你将获得真正反映选手节目参与广度的指标——不是“被录入次数”,而是“跨越多少个独立赛季”。这才是衡量《幸存者》资深玩家的核心依据。










