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

英超足球赛事DataFrame如何根据比赛日期设置赛季字段

英超赛事DataFrame新增赛季列实现方案

原有代码问题排查

  • 自定义get_season函数没有设置return返回值,调用apply后所有返回结果均为None,自然不符合预期
  • 仅判断了2021年8月之后的日期规则,没有覆盖其他年份的比赛日期,无法适配多赛季数据集
  • pd.to_datetime("01/08/2021")存在格式歧义,默认解析规则下会被识别为2021年1月8日,和你预期的2021年8月1日不符

正确实现方案

前置操作:统一日期列格式

首先将日期列转为标准datetime类型,避免后续判断出现格式错误:

import pandas as pd
# 可根据你实际的日期格式调整format参数,比如日/月/年格式对应'%d/%m/%Y'
prem_data_new['Date'] = pd.to_datetime(prem_data_new['Date'], format='%Y-%m-%d')

方案1:修正自定义函数实现(逻辑直观易理解)

根据英超赛季规则:每年8月到次年5月为一个完整赛季,赛季取值为赛季开始的年份,修改函数逻辑如下:

def get_season(row):
    match_date = row['Date']
    if match_date.month >= 8:
        return str(match_date.year)
    else:
        return str(match_date.year - 1)

prem_data_new['Season'] = prem_data_new.apply(get_season, axis=1)

方案2:向量化操作实现(数据量大时性能更优)

不需要遍历每行,直接用pandas内置的日期属性批量处理:

prem_data_new['Season'] = prem_data_new['Date'].dt.year.where(
    prem_data_new['Date'].dt.month >= 8,
    prem_data_new['Date'].dt.year - 1
).astype(str)

规则验证示例

按照上述逻辑,日期对应赛季结果如下,符合需求:

  • 2021-08-13 → 2021
  • 2022-05-22 → 2021(属于2021/22赛季,取开始年份)
  • 2022-08-06 → 2022

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:03