如果我在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。我不知道怎么做。
答案 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