python - group timestamps by 20 second intervals -
from datetime import datetime, timedelta d = datetime.now() data = [d + timedelta(minutes=i) in range(100)] # prepare , group data itertools import groupby def get_key(d): # group 30 minutes k = d + timedelta(minutes=-(d.minute % 20)) return datetime(k.year, k.month, k.day, k.hour, k.minute, 0) g = groupby(sorted(data), key=get_key) # print data key, items in g: print(key) item in items: print('-', item) i have large dataset of timestamps, , want group 20 second windows. above code works in grouping in minutes, cannot work grouping in 20 seconds
the group needs have seconds field:
code:
import datetime dt def get_key(d): # group 20 seconds k = d - dt.timedelta(seconds=d.second % 20) return dt.datetime(k.year, k.month, k.day, k.hour, k.minute, k.second) test code:
d = dt.datetime.now() data = [d + dt.timedelta(seconds=i*5) in range(20)] # prepare , group data import itertools g = it.groupby(sorted(data), key=get_key) # print data key, items in g: print(key) item in items: print('-', item) results:
2017-04-07 17:51:00 - 2017-04-07 17:51:16.372000 2017-04-07 17:51:20 - 2017-04-07 17:51:21.372000 - 2017-04-07 17:51:26.372000 - 2017-04-07 17:51:31.372000 - 2017-04-07 17:51:36.372000 2017-04-07 17:51:40 - 2017-04-07 17:51:41.372000 - 2017-04-07 17:51:46.372000 - 2017-04-07 17:51:51.372000 - 2017-04-07 17:51:56.372000 2017-04-07 17:52:00 - 2017-04-07 17:52:01.372000 - 2017-04-07 17:52:06.372000 - 2017-04-07 17:52:11.372000 - 2017-04-07 17:52:16.372000 2017-04-07 17:52:20 - 2017-04-07 17:52:21.372000 - 2017-04-07 17:52:26.372000 - 2017-04-07 17:52:31.372000 - 2017-04-07 17:52:36.372000 2017-04-07 17:52:40 - 2017-04-07 17:52:41.372000 - 2017-04-07 17:52:46.372000 - 2017-04-07 17:52:51.372000
Comments
Post a Comment