标记介于两个日期之间的日期

2024-09-29 19:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

     exdiv_date    expiry_date
0    2015-09-18    2015-12-18
1    2015-11-20    2015-12-18
2    NaN           2016-01-20
3    2015-12-26    2016-01-15
4    NaN           2015-11-21

我需要标记exdiv日期在今天之后和到期日期之前的每一行。输出应为:

     exdiv_date    expiry_date   flag
0    2015-09-18    2015-12-18    False
1    2015-11-20    2015-12-18    True
2    NaN           2016-01-20    False
3    2015-12-26    2016-01-15    True
4    NaN           2015-11-21    False

根据该示例,有些行没有exdiv\u日期(即:NaN)。我已确保出厂日期和到期日期的类型相同,如下所示:

df['exdiv_date'] = pd.to_datetime(df['exdiv_date'])
df['expiry_date'] = pd.to_datetime(df['expiry_date'])

我试过这样做:

mask = (df['exdiv_date'] > dt.date.today) & (df['exdiv_date'] < df['expiry_date'])
df.loc[mask, 'flag'] = True

但是我得到一个错误:TypeError: Cannot convert input to Timestamp

我想这个错误是因为南的,但我不知道如何绕过它


Tags: to数据标记falsetruedfdatetimedate
1条回答
网友
1楼 · 发布于 2024-09-29 19:33:44

括号有问题-使用dt.date.today()

您也可以使用np.where

import datetime as dt

#  exdiv_date expiry_date
#0 2015-09-18  2015-12-18
#1 2015-11-20  2015-12-18
#2        NaT  2016-01-20
#3 2015-12-26  2016-01-15
#4        NaT  2015-11-21


mask = (df['exdiv_date'] > dt.date.today()) & (df['exdiv_date'] < df['expiry_date'])
df.loc[mask, 'flag'] = True
print df
#  exdiv_date expiry_date  flag
#0 2015-09-18  2015-12-18   NaN
#1 2015-11-20  2015-12-18  True
#2        NaT  2016-01-20   NaN
#3 2015-12-26  2016-01-15  True
#4        NaT  2015-11-21   NaN
#if condition true add value True else add False to column flag
df['flag'] = np.where((df['exdiv_date'] > dt.date.today()) & (df['exdiv_date'] < df['expiry_date']), 'True', 'False')
print df
#  exdiv_date expiry_date   flag
#0 2015-09-18  2015-12-18  False
#1 2015-11-20  2015-12-18   True
#2        NaT  2016-01-20  False
#3 2015-12-26  2016-01-15   True
#4        NaT  2015-11-21  False

相关问题 更多 >

    热门问题