Football DataFrame -从日期开始设置赛季



这应该是一个简单的任务,但我不明白!

我有一个包含英超联赛足球数据的数据框架。我所要做的就是添加一个季节栏& &;使用日期设置季节,例如date = 2021-08-13, season = 2021.

Prem联盟

但是尽管我尽力了,还是不能使它工作。我该怎么做呢?最后尝试:

def get_season(row):
if (row['Date'] > pd.to_datetime("01/08/2021")):
season = "2021"
prem_data_new['Season'] = prem_data_new.apply(lambda row: get_season(row),axis = 1)

prem_data_new

  1. 检查prem_data_new['Date']类型
  2. 如果是datetime,使用如下命令
prem_data_new['Season'] = prem_data_new['Date'].year
  1. 如果没有尝试
prem_data_new['Date'] = pd.to_datetime(prem_data_new['Date'], errors='coerce')

,然后到达第2点


要获得季节,您可以尝试这个函数:

def func(ser):
lst = []
for i in range(len(ser)):
if ser[i].month < 8:
lst.append(ser[i].year)
else:
lst.append(ser[i].year + 1)
return lst
prem_data_new['Season'] = func(prem_data_new['Date'])

prem_data_new['Season'] = [x.year if x.month < 8 else x.year + 1 for x in prem_data_new['Date']]

您还可以使用map函数并定义一个函数来返回可分配给数据框字段的年份

由于您是根据月份和日期(例如8月1日)来决定季节的,因此您的函数应该比较日期字段的月份和日期。

演示:

import datetime
import pandas as pd
prem_data_new = pd.DataFrame({
'div':['e0','e0','e0','e0','e0'],
'date':['2021-08-13','2021-08-14','2020-07-30','2020-08-13','2021-08-01'],
'hometown':['Brentford','Man United','Burnley','Chelesa','Everton',],
'awayteam':['Arsenal','Leeds','Brighton','Crystal Palace','Southampton'],
'fthg':[2,5,1,3,3],
'ftag':[0,1,2,0,1],
'hthg':[1,1,1,2,0],
'htag':[0,0,0,0,1]
})
def get_season(row):
date_ser = pd.to_datetime(row['date'])
return date_ser.year if (date_ser.month >= 8 and date_ser.day >= 1) else date_ser.year - 1
prem_data_new['season'] = prem_data_new.apply(lambda row: get_season(row),axis = 1)
print(prem_data_new)

输出:

div        date    hometown        awayteam  fthg  ftag  hthg  htag  season
0  e0  2021-08-13   Brentford         Arsenal     2     0     1     0    2021
1  e0  2021-08-14  Man United           Leeds     5     1     1     0    2021
2  e0  2020-07-30     Burnley        Brighton     1     2     1     0    2019
3  e0  2020-08-13     Chelesa  Crystal Palace     3     0     2     0    2020
4  e0  2021-08-01     Everton     Southampton     3     1     0     1    2021

检查日期是否在季节内:

  1. 检查季节是否与新年(season.start.year !== season.end.year)相交
  2. 如果是这种情况,拆分季节分为两部分
  3. 设置所有年份相同(季节开始/结束和date_to_check
  4. )
  5. 只需对这些部件进行start < date < end检查

这elïminates年+1/年1的问题立即。

  • 。. NET linq查询
  • SQL查询
  • jsfiddle

相关内容

  • 没有找到相关文章

最新更新