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

Pandas合并Web爬取数据表产生重复行 按TEAM和Year去重方案

MLB数据表合并去重解决方案

问题根因

现有合并逻辑仅以Year作为关联键,单一年份对应多支球队记录时会生成笛卡尔积匹配结果:例如单年度存在30支球队数据,左表1条该年度记录会匹配右表30条同年度记录,直接产生大量无效重复行。

修复步骤

  • 合并时将TEAM、Year同时设为关联匹配键,仅当两个字段取值完全一致时才拼接对应行,从根源避免跨球队的错误匹配。合并前需确认两张表的球队字段名完全统一,若投手表球队字段名不为TEAM,先做字段重命名即可。
  • 追加兜底去重逻辑:若单表内部本身存在同球队、同年份的重复记录,合并后以TEAM+Year为判断依据去重,保留首条有效记录。

参考代码

# 前置检查:若mlb_pitch_df中球队字段名不是TEAM,先执行重命名
# 示例:mlb_pitch_df = mlb_pitch_df.rename(columns={'原球队字段名':'TEAM'})

# 双维度关联合并
mlb_df = mlb_bat_df.merge(
    mlb_pitch_df[['TEAM','Year','RA/G','ERA','CG','tSho','SV','IP',
                  'H_A','R_A','ER','HR_A','BB_A','Ks','WHIP','SO9','HR9','PAge']],
    on=['TEAM', 'Year'],
    how='left' # 以打击表为基准保留全量数据,可根据实际需求替换为inner/right
)

# 兜底去重,消除同球队同年份的重复行
mlb_df = mlb_df.drop_duplicates(subset=['TEAM', 'Year'], keep='first')

前置校验建议

合并前可先分别检查两张表内的TEAM+Year组合是否唯一,提前处理单表内的重复数据,减少后续异常:

# 输出两张表中(TEAM,Year)组合的重复数量
print("打击表重复条目数:", mlb_bat_df[['TEAM','Year']].duplicated().sum())
print("投手表重复条目数:", mlb_pitch_df[['TEAM','Year']].duplicated().sum())

若两张表存在除关联键外的同名字段,merge会自动为左表字段加_x后缀、右表字段加_y后缀,可按需调整列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:36:17