足球球员黄牌概率全矩阵计算代码故障排查请求
球员对阵黄牌概率矩阵生成问题修复
需求目标
- 构建包含449名球员两两对阵的黄牌概率网格,概率由三个因素决定:
- player_rate:球员场均黄牌获取率(例:0.5表示每2场得1张黄牌)
- team_rates:对手球队导致对手吃牌率与平均值的偏差(例:0.10表示对阵该队时吃牌概率比平均高10%)
- opponent_player_rates:对阵特定对手时的吃牌率偏差(例:0.05表示对阵该球员时吃牌概率比平均高5%)
- 计算公式:
adjusted_likelihood = player_rate * (1 + team_rate + opponent_player_rate)
问题描述
运行提供的Python代码后,仅填充了矩阵第一行(Max Aarons对应的行),无法生成完整的449×449概率矩阵,部分NaN为预期情况(部分球队未设置team_rates)。
问题原因
- 计算逻辑错误:原
calculate_adjusted_likelihood函数仅通过zip遍历单组球员数据,只生成了449个值,而非两两对阵所需的449×449个值。 - 数据长度不匹配:填充矩阵时,
product(player_names, repeat=2)生成了449²个对阵组合,但adjusted_likelihoods仅449个值,仅能填充第一行所有列,后续位置无数据可用。 - 未定义变量:原函数中使用了未传入的
player_name变量,存在语法隐患。
修正后的代码
import pandas as pd from itertools import product # 将球员数据转为字典,提升取值效率 player_data = clubs_slim.set_index('player').to_dict('index') # 初始化449×449的概率矩阵 df_likelihoods = pd.DataFrame(index=clubs_slim['player'], columns=clubs_slim['player']) # 遍历所有两两对阵组合,逐个计算概率 for player_name, opponent_name in product(clubs_slim['player'], repeat=2): # 获取当前球员的场均黄牌率 player_rate = player_data[player_name]['Yellows per 90'] # 获取对手所在球队的吃牌偏差率 team_rate = player_data[opponent_name]['CrdY Against Avg relative'] # 获取对手的球员级吃牌偏差率 opponent_player_rate = player_data[opponent_name]['Yellow Threat Scaled'] # 处理NaN值,任一因素为NaN则结果保留NaN if not pd.isna(player_rate) and not pd.isna(team_rate) and not pd.isna(opponent_player_rate): adjusted_likelihood = player_rate * (1 + team_rate + opponent_player_rate) else: adjusted_likelihood = None # 填充矩阵对应位置 df_likelihoods.at[player_name, opponent_name] = adjusted_likelihood # 合并球员基础数据与概率矩阵 merged_df = clubs_slim[['player', 'squad', 'position', '90s', 'Yellows per 90', 'Yellow Threat']].merge( df_likelihoods.reset_index(), left_on='player', right_on='index' ).drop('index', axis=1) # 导出结果到CSV merged_df.to_csv('booking_likelihood_dump.csv') # 展示最终结果 print(merged_df)
代码说明
- 用字典
player_data存储球员数据,避免重复查询DataFrame,提升遍历效率。 - 直接遍历所有两两对阵组合,确保生成完整的449×449概率矩阵。
- 增加NaN值处理逻辑,符合需求中“部分NaN属于预期情况”的要求。
- 移除原代码中未定义变量的问题,逻辑更简洁清晰。
内容的提问来源于stack exchange,提问作者Philby_Walsh
相关产品推荐
相关产品推荐

