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

时间:2017-01-30 14:42:42

标签: python pandas time-series

如果我在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       

我想创建一个新列,如果在列表中,在EndDate行之后不到一小时就存在StartDate,则该列具有指示符值。因此,示例输出将如下所示:

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小时内。

行的开始和结束日期不应该有任何重叠,所以我想我应该通过startdate命令,使用(下一行的StartDate)创建一个新列 - (此行的EndDate),然后更改如果时间小于一小时,则新列的值为1;如果时间小于一小时,则为0。我不知道怎么做。

1 个答案:

答案 0 :(得分:2)

这是一种方法。对于每个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