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

Python足球球员相似性查询:解决重复数据报错问题

解决重复球员姓名查询问题的修正代码

针对你遇到的跨赛季重名球员报错问题,以下是修正后的代码及关键逻辑说明:

import pandas as pd

# 获取用户输入
player_name = input('Enter the player name you want to compare: ')
target_season = input('Enter the season: ')

# 1. 验证输入的球员是否存在于目标赛季中
player_in_season = df5[(df5['name'] == player_name) & (df5['season'] == target_season)]
if player_in_season.empty:
    print(f"Error: Player {player_name} not found in season {target_season}")
    exit()

# 2. 获取相似度数据并合并目标赛季的球员信息
# 提取目标球员的相似度排序结果
sim_scores = sim_matrix[player_name].reset_index().sort_values(by=player_name, ascending=False)
# 合并时仅保留目标赛季的球员,避免跨赛季重名干扰
sim_players = pd.merge(
    sim_scores,
    df5[(df5['season'] == target_season)][['name', 'clusters', 'season']],
    on=['name'],
    how='inner'
).rename(
    columns={player_name: f"{player_name} - Euclidean Similarity %", 
             "name": "Player name", 
             "season": "Season"}
).head(30)

# 3. 排除查询的球员本身
sim_players = sim_players[sim_players['Player name'] != player_name]

# 输出结果
print(sim_players)

核心修正逻辑:

  • 锁定球员-赛季组合:先验证输入球员是否存在于指定赛季,避免无效查询,同时明确我们只处理该赛季的球员数据。
  • 合并前过滤赛季:在合并相似度数据与球员信息前,先将df5过滤到目标赛季,再用inner join确保结果仅包含该赛季的球员,彻底规避跨赛季重名带来的重复数据问题。
  • 替换错误逻辑:删除原代码中无效的column.join(df5)语句,改用正确的DataFrame布尔索引实现过滤。

进阶优化建议:

如果你的数据集有唯一标识(比如player_id或name_season组合列),可以直接用唯一标识查询相似度矩阵,从根源上消除重名歧义:

# 假设df5中有唯一标识列name_season(格式如"PlayerName_2022/23")
player_unique_id = player_in_season['name_season'].iloc[0]
sim_scores = sim_matrix[player_unique_id].reset_index().sort_values(by=player_unique_id, ascending=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:03:14