from datetime import datetime, timedelta
example_table = [
{'first_alerted_time':datetime(2014, 12, 11, 2, 1,45)},
{'first_alerted_time':datetime(2014, 12, 11, 2, 2,33)},
{'first_alerted_time':datetime(2014, 12, 11, 2, 2,45)},
{'first_alerted_time':datetime(2014, 12, 11, 2, 3,45)},
]
start_date = datetime(2014,12,11)
step = timedelta(minutes=3)
end_date = datetime(2014,12,12)
def date_range(start, end, step):
d = start
while d < end: # right-open interval
yield d
d += step
import numpy as np
times = np.fromiter((d['first_alerted_time'] for d in example_table),
dtype='datetime64[us]', count=len(example_table))
bins = np.fromiter(date_range(start_date, end_date + step, step),
dtype='datetime64[us]')
a, bins = np.histogram(times, bins)
print(dict(zip(bins[a.nonzero()].tolist(), a[a.nonzero()])))
ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YQoKZXhhbXBsZV90YWJsZSA9IFsgCiAgeydmaXJzdF9hbGVydGVkX3RpbWUnOmRhdGV0aW1lKDIwMTQsIDEyLCAxMSwgMiwgMSw0NSl9LAogIHsnZmlyc3RfYWxlcnRlZF90aW1lJzpkYXRldGltZSgyMDE0LCAxMiwgMTEsIDIsIDIsMzMpfSwKICB7J2ZpcnN0X2FsZXJ0ZWRfdGltZSc6ZGF0ZXRpbWUoMjAxNCwgMTIsIDExLCAyLCAyLDQ1KX0sCiAgeydmaXJzdF9hbGVydGVkX3RpbWUnOmRhdGV0aW1lKDIwMTQsIDEyLCAxMSwgMiwgMyw0NSl9LApdCnN0YXJ0X2RhdGUgPSBkYXRldGltZSgyMDE0LDEyLDExKQpzdGVwID0gdGltZWRlbHRhKG1pbnV0ZXM9MykKZW5kX2RhdGUgPSBkYXRldGltZSgyMDE0LDEyLDEyKSAKCmRlZiBkYXRlX3JhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApOgogICAgZCA9IHN0YXJ0CiAgICB3aGlsZSBkIDwgZW5kOiAjIHJpZ2h0LW9wZW4gaW50ZXJ2YWwKICAgICAgICB5aWVsZCBkCiAgICAgICAgZCArPSBzdGVwCgppbXBvcnQgbnVtcHkgYXMgbnAKdGltZXMgPSBucC5mcm9taXRlcigoZFsnZmlyc3RfYWxlcnRlZF90aW1lJ10gZm9yIGQgaW4gZXhhbXBsZV90YWJsZSksCiAgICAgICAgICAgICAgICAgICAgIGR0eXBlPSdkYXRldGltZTY0W3VzXScsIGNvdW50PWxlbihleGFtcGxlX3RhYmxlKSkKCmJpbnMgPSBucC5mcm9taXRlcihkYXRlX3JhbmdlKHN0YXJ0X2RhdGUsIGVuZF9kYXRlICsgc3RlcCwgc3RlcCksCiAgICAgICAgICAgICAgICAgICBkdHlwZT0nZGF0ZXRpbWU2NFt1c10nKQphLCBiaW5zID0gbnAuaGlzdG9ncmFtKHRpbWVzLCBiaW5zKQpwcmludChkaWN0KHppcChiaW5zW2Eubm9uemVybygpXS50b2xpc3QoKSwgYVthLm5vbnplcm8oKV0pKSk=