在两个时间戳之间创建5分钟的间隔

yyhrrdl8  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(428)

我有一组数据点,每个数据点有两列: start_dt 以及 end_dt . 我想知道如何将开始和结束之间的时间间隔划分为5分钟?
例如,
id+start+tm+end+dt
1+++++++2019-01-01 10:00 +++++++ 2019-01-01 11:00

我要找的是:
id+start+tm+end+dt
1+2019-01-01 10:00 +++++++ 2019-01-01 10:05
1
+2019-01-01 10:05 +++++++ 2019-01-01 10:10
1+2019-01-01 10:10 +++++++ 2019-01-01 10:15
1
+2019-01-01 10:15 +++++++ 2019-01-01 10:20

堡垒也是如此
有什么现成的功能可以这样做吗?
如果没有,那么创建这个函数的任何帮助都是很好的

6l7fqoea

6l7fqoea1#

我不知道pyspark,但如果你用Pandas这个工作(Pypark可能类似):
1:创建数据

import pandas as pd
import numpy as np
data = pd.DataFrame({
    'id':[1, 2],
    'start_tm': pd.date_range('2019-01-01 00:00', periods=2, freq='D'),
    'end_dt': pd.date_range('2019-01-01 00:30', periods=2, freq='D')})

# pandas dataframe is similar to the data in pyspark

输出

id  start_tm    end_dt
1   2019-01-01  2019-01-01 00:30:00
2   2019-01-02  2019-01-02 00:30:00

2:拆分列

period = np.timedelta64(5, 'm') # 5 minutes
idx = (data['end_dt'] - data['start_tm']) > period
while idx.any():
    new_data = data[idx].copy()
    new_data['start_tm'] = new_data['start_tm'] + period
    data.loc[idx, 'end_dt'] = (data[idx]['start_tm'] + period).values
    data = pd.concat([data, new_data], axis=0)
    idx = (data['end_dt'] - data['start_tm']) > period

输出

id  start_tm    end_dt
1   2019-01-01 00:00:00     2019-01-01 00:05:00
2   2019-01-02 00:00:00     2019-01-02 00:05:00
1   2019-01-01 00:05:00     2019-01-01 00:10:00
2   2019-01-02 00:05:00     2019-01-02 00:10:00
1   2019-01-01 00:10:00     2019-01-01 00:15:00
2   2019-01-02 00:10:00     2019-01-02 00:15:00
1   2019-01-01 00:15:00     2019-01-01 00:20:00
2   2019-01-02 00:15:00     2019-01-02 00:20:00
1   2019-01-01 00:20:00     2019-01-01 00:25:00
2   2019-01-02 00:20:00     2019-01-02 00:25:00
1   2019-01-01 00:25:00     2019-01-01 00:30:00
2   2019-01-02 00:25:00     2019-01-02 00:30:00
ctzwtxfj

ctzwtxfj2#

如果您有两个python datetime对象表示一个时间跨度,并且您只想将该时间跨度分成由datetime对象表示的5分钟间隔,您可以这样做:

import datetime

d1 = datetime.datetime(2019, 1, 1, 10, 0)
d2 = datetime.datetime(2019, 1, 1, 11, 0)
delta = datetime.timedelta(minutes=5)
times = []
while d1 < d2:
    times.append(d1)
    d1 += delta
times.append(d2)

for i in range(len(times) - 1):
    print("{} - {}".format(times[i], times[i+1]))

输出:

2019-01-01 10:00:00 - 2019-01-01 10:05:00
2019-01-01 10:05:00 - 2019-01-01 10:10:00
2019-01-01 10:10:00 - 2019-01-01 10:15:00
2019-01-01 10:15:00 - 2019-01-01 10:20:00
2019-01-01 10:20:00 - 2019-01-01 10:25:00
2019-01-01 10:25:00 - 2019-01-01 10:30:00
2019-01-01 10:30:00 - 2019-01-01 10:35:00
2019-01-01 10:35:00 - 2019-01-01 10:40:00
2019-01-01 10:40:00 - 2019-01-01 10:45:00
2019-01-01 10:45:00 - 2019-01-01 10:50:00
2019-01-01 10:50:00 - 2019-01-01 10:55:00
2019-01-01 10:55:00 - 2019-01-01 11:00:00

这应该能处理一个不是三角形偶数倍的周期,在结束时给你一个更短的间隔。

相关问题