以下是我所拥有的数据
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的新手,不知道该怎么做。
有人能帮我做吗?
发布于 2018-06-20 07:47:14
您要寻找的帮助就在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"
timedelta的.seconds
属性提供两个日期时间之间的秒数(四舍五入为最接近的整数秒)。
有了这些知识,您可以遍历一系列日期时间字符串,并按如下方式对它们进行分组(假设时间戳已经按顺序/顺序排列):
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}')
这将输出:
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
这只是一个又快又脏的解决方案;根据您的具体用例,您肯定可以改进它。希望你能理解如何使用时间增量来解决这个问题。
https://stackoverflow.com/questions/50937878
复制相似问题