如果我在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
因为第一行有
EndDate 2015-07-20 17:56:00
第4行有
StartDate 2015-07-20 18:00:51
在1小时内。
各行的开始日期和结束日期不应有任何重叠,因此我认为我应该按startdate进行排序,使用(下一行的StartDate)-(此行的EndDate)创建一个新列,然后更改如果时间少于一个小时,则将新列设置为1;如果时间少于一个小时,则将其设置为0。我不确定如何执行此操作。
这是一种方法。对于每个EndDate
,应用所需的datetime范围测试。使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句