我有一个日期时间对象列表,日期范围跨越多年。
我想把这些日期分成两个小时的垃圾箱。因此,对于0 hr bin,从23:00到1:00的所有日期时间都会在这个容器中(+/- 1小时)。
最后,我想要一个属于bin的每个日期时间的索引列表。所以如果我的约会时间列表是
datetime.datetime(2014, 10, 3, 20, 29, 54, 268074),
datetime.datetime(2014, 10, 4, 11, 28, 34, 59937),
datetime.datetime(2014, 10, 4, 19, 40, 39, 718856),
datetime.datetime(2016, 8, 18, 12, 17, 57, 417245),
datetime.datetime(2016, 8, 19, 1, 37, 57, 465573)我想要一个列表的结果,如:
[[],
[4],
[],
[],
[],
[],
[1,3],
[],
[],
[],
[0,2],
[]]其中,结果给出了与最接近0:00的日期时间对应的索引列表,结果给出了最接近2:00的列表,等等。
我的第一个想法是使用datetime.time对象创建一个小时列表,然后从我的列表中减去一个日期时间,并找到最小的时间。
import datetime
hrs = array([datetime.time(t) for t in arange(0,24,2)])
closetHr = min(hrs - times[0].time())但是这给了我错误的unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'
发布于 2016-11-21 19:01:25
这将产生样本输入的预期输出,避免时间减法:
bins = [[] for t in arange(0,24,2)]
for i,t in enumerate(times):
ix = (t.hour+1)%24 # "normalize" the hour
bins[ix/2].append( i ) # convert to a bin index当该值位于奇数小时边界(即1:00)时,不清楚这是否能满足您的需要,但随后您没有指定。
https://stackoverflow.com/questions/40727185
复制相似问题