Python 3.x Python根据日期范围计算新日期
我有一个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 我想创建一个标记为“草
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)
冰球,曲棍球,还是空气曲棍球?冰球,曲棍球,还是空气曲棍球?