gpt4 book ai didi

python - 标记某个范围内的日期

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:52 26 4
gpt4 key购买 nike

我有以下数据框:

     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_date 在今天之后且 expiry_date 之前的每一行。输出应该是:

     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_date(即:NaN)。我已确保 exdiv_date 和 expiry_date 的类型相同,如下所示:

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:无法将输入转换为时间戳

我认为错误是由于 NaN 造成的,但我不知道如何解决它。

最佳答案

括号有问题 - 使用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

关于python - 标记某个范围内的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com