如果我在熊猫中有一个数据帧,例如:
StartDate, EndDate, uniqueid
2015-07-20 15:04:13, 2015-07-20 17:56:00, 1
2015-07-20 20:32:16, 2015-07-20 20:56:11, 3
2015-07-20 22:35:59, 2015-07-20 22:51:10, 11
2015-07-20 18:00:51, 2015-07-20 18:42:01, 12
我想创建一个新列,如果列表中存在一个 StartDate 在行 EndDate 之后不到一小时,则该列具有指示值。因此,示例输出如下所示:
StartDate, EndDate, uniqueid, WithinHour
2015-07-20 15:04:13, 2015-07-20 17:56:00, 1, 1
2015-07-20 20:32:16, 2015-07-20 20:56:11, 3, 0
2015-07-20 22:35:59, 2015-07-20 22:51:10, 11, 0
2015-07-20 18:00:51, 2015-07-20 18:42:01, 12, 0
因为第 1 行有
EndDate 2015-07-20 17:56:00
第 4 行有
StartDate 2015-07-20 18:00:51
这是在1小时内。
行的开始日期和结束日期不应有任何重叠,因此我认为我应该按开始日期排序,使用(下一行的开始日期)-(此行的结束日期)创建一个新列,然后如果时间小于一小时,则将新列的值更改为 1,如果时间大于,则更改为 0。不过我不确定该怎么做。
这是一种方法。对于每个EndDate
,应用所需的日期时间范围测试。使用 any
获取标量答案,因为如果至少一行匹配,则值将为 True:
df['uniqueid'] = df.EndDate.apply(lambda dt: (((df.StartDate-pd.Timedelta(1, 'h')) <= dt)
& (df.StartDate >= dt )).any())
df.uniqueid
Out[57]:
0 True
1 False
2 False
3 False
Name: uniqueid, dtype: bool