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