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

MLB球队周日夜赛后下一场比赛胜率计算技术求助

解决方案:高效计算MLB周日夜赛后下一场比赛的胜率

核心思路

摒弃逐行循环的低效方式,利用pandas的分组、排序和移位操作,精准关联球队的周日夜赛与下一场比赛,快速统计胜率。

步骤与代码实现

  1. 预处理数据:统一日期格式并按球队、年份、比赛日期排序,确保比赛顺序正确
import pandas as pd

# 转换日期列为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

# 按球队、年份、日期排序,保证同队同年的比赛按时间先后排列
df = df.sort_values(by=['Team', df['Date'].dt.year, 'Date']).reset_index(drop=True)
  1. 标记周日夜赛:新增列标记该行是否为目标赛事
df['is_sunday_night'] = (df['Day'] == 'Sun') & (df['Day/Night'] == 'N')
  1. 关联下一场比赛:按球队+年份分组,获取下一场比赛的关键信息
# 移位获取同队同年的下一场比赛胜负结果
df['next_game_win'] = df.groupby(['Team', df['Date'].dt.year])['Winning Team'].shift(-1)
# 标记下一场比赛是否为周一或周二(根据你的Day列缩写调整,比如'Mon'/'Tue')
df['next_game_is_monday_tuesday'] = df.groupby(['Team', df['Date'].dt.year])['Day'].shift(-1).isin(['Mon', 'Tue'])
  1. 筛选有效样本并计算胜率:只保留符合条件的样本,统计胜率
# 筛选条件:当前是周日夜赛,且下一场是周一/周二
valid_samples = df[(df['is_sunday_night']) & (df['next_game_is_monday_tuesday'])]

# 计算胜率:下一场获胜次数 / 有效样本总数
# 若Winning Team列存储的是获胜队名,判断逻辑如下;若用'W'/'L'标记,改为`next_game_win == 'W'`即可
win_count = (valid_samples['next_game_win'] == valid_samples['Team']).sum()
total_count = len(valid_samples)

win_percentage = win_count / total_count if total_count > 0 else 0
print(f"周日夜赛后下一场(周一/周二)比赛的胜率:{win_percentage:.2%}")

关键说明

  • 按Team + 年份分组:完美解决Game Number每年重置的问题,确保只在同一年份内匹配下一场比赛
  • 移位操作shift(-1):用向量化方式替代循环,性能提升显著
  • 逻辑灵活调整:可根据你数据中胜负标记的实际格式,修改获胜判断条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:33