根据日期时间值是否在一小时内在 pandas 中创建新列



如果我在熊猫中有一个数据帧,例如:

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