Python 3.x Python根据日期范围计算新日期

Python 3.x Python根据日期范围计算新日期,python-3.x,pandas,dataframe,python-datetime,Python 3.x,Pandas,Dataframe,Python Datetime,我有一个Python熊猫数据框,其中包含曲棍球运动员的出生日期,如下所示: Player Birth Year Birth Date Player A 1990 1990-05-12 Player B 1991 1991-10-30 Player C 1992 1992-09-10 Player D 1990 1990-11-15 我想创建一个标记为“草

我有一个Python熊猫数据框,其中包含曲棍球运动员的出生日期,如下所示:

Player         Birth Year    Birth Date
Player A         1990        1990-05-12
Player B         1991        1991-10-30
Player C         1992        1992-09-10
Player D         1990        1990-11-15
我想创建一个标记为“草稿年”的新列,该列根据此规则计算:

If MM-DD is before 09-15, Draft Year = Birth Year + 18
Else if MM-DD is after 09-15 Draft Year = Birth Year + 19
这将使示例的输出:

Player         Birth Year    Birth Date     Draft Year
Player A         1990        1990-05-12      2008
Player B         1991        1991-10-30      2010
Player C         1992        1992-09-10      2010
Player D         1990        1990-11-15      2009
我已经尝试使用

Data['Birth Date'] = Data['Birth Date'].str.split('-').str[1:]
但这会给我返回一个[mm,dd]列表,这很难处理。任何关于如何做到这一点的建议都将不胜感激

使用:

输出

使用:

输出

又快又脏 创建一个月为100*的列,并将其添加到当天

cutoff = df['Birth Date'].pipe(lambda d: d.dt.month * 100 + d.dt.day)
df['Draft Year'] = df['Birth Year'] + 18 + (cutoff > 915)

df

     Player  Birth Year Birth Date  Draft Year
0  Player A        1990 1990-05-12        2008
1  Player B        1991 1991-10-30        2010
2  Player C        1992 1992-09-10        2010
3  Player D        1990 1990-11-15        2009
又快又脏 创建一个月为100*的列,并将其添加到当天

cutoff = df['Birth Date'].pipe(lambda d: d.dt.month * 100 + d.dt.day)
df['Draft Year'] = df['Birth Year'] + 18 + (cutoff > 915)

df

     Player  Birth Year Birth Date  Draft Year
0  Player A        1990 1990-05-12        2008
1  Player B        1991 1991-10-30        2010
2  Player C        1992 1992-09-10        2010
3  Player D        1990 1990-11-15        2009
格式为yyyy mm dd的日期时间可作为字符串排序。此解决方案利用了这一事实:

df['Draft Year'] = df['Birth Year'] + np.where(df['Birth Date'].dt.strftime('%m-%d') < '09-15', 18, 19)
格式为yyyy mm dd的日期时间可作为字符串排序。此解决方案利用了这一事实:

df['Draft Year'] = df['Birth Year'] + np.where(df['Birth Date'].dt.strftime('%m-%d') < '09-15', 18, 19)

冰球,曲棍球,还是空气曲棍球?冰球,曲棍球,还是空气曲棍球?