首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为时间戳创建组标识符

为时间戳创建组标识符
EN

Stack Overflow用户
提问于 2018-06-20 06:39:40
回答 1查看 44关注 0票数 1

以下是我所拥有的数据

代码语言:javascript
复制
  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秒内,我想为每个组创建一个标识符。

输出应该是这样的:

代码语言:javascript
复制
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的新手,不知道该怎么做。

有人能帮我做吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-20 07:47:14

您要寻找的帮助就在Python的datetime模块中--具体地说就是datetime.timedelta类。

在Python中给出两个datetime实例,你可以通过减去它们来得到它们的差值,这个差值是以datetime.timedelta实例的形式给出的:

代码语言:javascript
复制
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"

timedelta的.seconds属性提供两个日期时间之间的秒数(四舍五入为最接近的整数秒)。

有了这些知识,您可以遍历一系列日期时间字符串,并按如下方式对它们进行分组(假设时间戳已经按顺序/顺序排列):

代码语言:javascript
复制
import datetime

datetimes = ['2018-06-19 14:23:14', '2018-06-19 14:23:16', '2018-06-19 14:23:27', '2018-06-19 14:23:28', '2018-06-19 14:23:29']

# For collecting the groups
grouped_datetimes = []

# Assumes the datetimes are already in order; if not, you can sort them beforehand
min_ts = datetime.datetime.strptime(datetimes[0], '%Y-%m-%d %H:%M:%S')
group = [datetimes[0]]
for dt in datetimes[1:]:
    ts = datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
    diff = ts - min_ts
    if diff.seconds < 4:
        group.append(dt)
    else:
        grouped_datetimes.append(group)
        group = [dt]
        min_ts = ts

# Add the last group that was built up
if group:
    grouped_datetimes.append(group)


for index, group in enumerate(grouped_datetimes):
    for ts in group:
        print(f'{ts}\t{index}')

这将输出:

代码语言:javascript
复制
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

这只是一个又快又脏的解决方案;根据您的具体用例,您肯定可以改进它。希望你能理解如何使用时间增量来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50937878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档