Python 为时间戳创建组标识符
以下是我掌握的数据Python 为时间戳创建组标识符,python,python-2.7,Python,Python 2.7,以下是我掌握的数据 timediff 2018-06-19 01:00:00 2018-06-19 01:00:01 2018-06-19 01:00:02 2018-06-19 01:00:03 2018-06-19 02:00:00 2018-06-19 02:00:01 2018-06-19 02:00:02 2018-06-19 02:00:03 2018-06-19 02:15:00 2018-06-19 02:15:01 2018-06-19 02:15:02 2018-06-1
timediff
2018-06-19 01:00:00
2018-06-19 01:00:01
2018-06-19 01:00:02
2018-06-19 01:00:03
2018-06-19 02:00:00
2018-06-19 02:00:01
2018-06-19 02:00:02
2018-06-19 02:00:03
2018-06-19 02:15:00
2018-06-19 02:15:01
2018-06-19 02:15:02
2018-06-19 02:15:03
2018-06-19 02:30:00
2018-06-19 02:30:01
2018-06-19 02:30:02
2018-06-19 02:30:03
我想为数据中的每个时间组创建一个组标识符。如果数据在4-5秒内,我想为每个组创建一个标识符
输出应该是这样的
timediff identifier
2018-06-19 01:00:00 1
2018-06-19 01:00:01 1
2018-06-19 01:00:02 1
2018-06-19 01:00:03 1
2018-06-19 02:00:00 2
2018-06-19 02:00:01 2
2018-06-19 02:00:02 2
2018-06-19 02:00:03 2
2018-06-19 02:15:00 3
2018-06-19 02:15:01 3
2018-06-19 02:15:02 3
2018-06-19 02:15:03 3
2018-06-19 02:30:00 4
2018-06-19 02:30:01 4
2018-06-19 02:30:02 4
2018-06-19 02:30:03 4
由于时间间隔内的每个条目都在4-5秒内,因此我希望将其保留在一个组中。同样,我想确定所有的组
我是python新手,不知道如何做到这一点
有人能帮我吗?您正在寻找的帮助位于Python的
datetime
模块中,特别是datetime.timedelta
类
在Python中给出两个datetime实例,只需减去它们就可以得到它们的差值,这个差值以datetime.timedelta
实例的形式给出:
import datetime
# Parse a couple datetimes...
t1 = datetime.strptime('2018-06-19 14:23:14', '%Y-%m-%d %H:%M:%S')
t2 = datetime.strptime('2018-06-19 14:23:16', '%Y-%m-%d %H:%M:%S')
diff = t2 - t1 # Get the timedelta
if diff.seconds < 4:
# t1 and t2 are in the same "group"
这将产生:
2018-06-19 14:23:14 0
2018-06-19 14:23:16 0
2018-06-19 14:23:27 1
2018-06-19 14:23:28 1
2018-06-19 14:23:29 1
这只是一个快速而肮脏的解决方案;根据您的具体用例,您肯定可以改进它。希望你能想到如何使用时间增量来解决这个问题。我过去常常每隔五分钟对时间戳进行分组。 如果时间在一个组中,它将生成相同的组密钥: 组密钥=int(时间戳/间隔)*间隔 group_键表示时间在区域间[group_键,group_键+间隔] 例如:
interval is 5 seconds
group_key | timestame| time
1529341200 1529341200 '2018-06-19 01:00:00'
1529341200 1529341201 '2018-06-19 01:00:01'
1529341200 1529341202 '2018-06-19 01:00:02'
1529341200 1529341203 '2018-06-19 01:00:03'
1529341200 1529341204 '2018-06-19 01:00:04'
1529341205 1529341205 '2018-06-19 01:00:05'
1529341205 1529341206 '2018-06-19 01:00:06'
1529341205 1529341207 '2018-06-19 01:00:07'
1529341205 1529341208 '2018-06-19 01:00:08'
1529341205 1529341209 '2018-06-19 01:00:09'
1529341210 1529341210 '2018-06-19 01:00:10'
1529341210 1529341211 '2018-06-19 01:00:11'
1529341210 1529341212 '2018-06-19 01:00:12'
1529341210 1529341213 '2018-06-19 01:00:13'
1529341210 1529341214 '2018-06-19 01:00:14'
关于你的问题:
import time
datetimes=['2018-06-19 01:00:00','2018-06-19 01:00:01','2018-06-19 01:00:02','2018-06-19 01:00:03','2018-06-19 02:00:00','2018-06-19 02:00:01','2018-06-19 02:00:02','2018-06-19 02:00:03','2018-06-19 02:15:00','2018-06-19 02:15:01','2018-06-19 02:15:02','2018-06-19 02:15:03','2018-06-19 02:30:00','2018-06-19 02:30:01','2018-06-19 02:30:02','2018-06-19 02:30:03']
time_interval = 5
group = {}
print "timediff identifier"
for dt in datetimes:
timestamp = int(time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S')))
identifier = int(timestamp/time_interval)*time_interval
print "'"+dt+"'", identifier
但是标识符不是1,2,3,4,而是组的开始时间戳,我认为它更有意义。如果必须使用1,2,3,4,则需要进一步转换
输出:
timediff identifier
'2018-06-19 01:00:00' 1529341200
'2018-06-19 01:00:01' 1529341200
'2018-06-19 01:00:02' 1529341200
'2018-06-19 01:00:03' 1529341200
'2018-06-19 02:00:00' 1529344800
'2018-06-19 02:00:01' 1529344800
'2018-06-19 02:00:02' 1529344800
'2018-06-19 02:00:03' 1529344800
'2018-06-19 02:15:00' 1529345700
'2018-06-19 02:15:01' 1529345700
'2018-06-19 02:15:02' 1529345700
'2018-06-19 02:15:03' 1529345700
'2018-06-19 02:30:00' 1529346600
'2018-06-19 02:30:01' 1529346600
'2018-06-19 02:30:02' 1529346600
'2018-06-19 02:30:03' 1529346600
您尝试了什么?您没有向我们展示您所做的任何尝试。让我们仔细想想。什么数据结构可能有用?输入是否保证有序?
timediff identifier
'2018-06-19 01:00:00' 1529341200
'2018-06-19 01:00:01' 1529341200
'2018-06-19 01:00:02' 1529341200
'2018-06-19 01:00:03' 1529341200
'2018-06-19 02:00:00' 1529344800
'2018-06-19 02:00:01' 1529344800
'2018-06-19 02:00:02' 1529344800
'2018-06-19 02:00:03' 1529344800
'2018-06-19 02:15:00' 1529345700
'2018-06-19 02:15:01' 1529345700
'2018-06-19 02:15:02' 1529345700
'2018-06-19 02:15:03' 1529345700
'2018-06-19 02:30:00' 1529346600
'2018-06-19 02:30:01' 1529346600
'2018-06-19 02:30:02' 1529346600
'2018-06-19 02:30:03' 1529346600