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

Python 在两个时间戳之间创建5分钟的间隔,python,hive,pyspark,Python,Hive,Pyspark,我有一组数据点,每个数据点有两列:start\u dt和end\u 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

我有一组数据点,每个数据点有两列:
start\u dt
end\u 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

==================================================

因此,福特

是否有现成的功能可以这样做


如果没有,那么创建此函数的任何帮助都是非常好的

如果您有两个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]))

这应该可以处理一个不是δ的偶数倍的周期,在结束时给你一个更短的间隔。

我不知道pyspark,但是如果你使用熊猫,这是有效的。(pyspark可能与之类似):

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
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
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  2019-01-01 00:30:00
2   2019-01-02  2019-01-02 00:30:00
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

我不明白这个问题,可能是因为我不知道hive或Pypark。这里显示的字符串只是代表性的,还是只是一些字符串和日期操作?这仅仅是像你在下面展示的“例如”那样获取输入,然后像你在下面展示的“我正在寻找的是”那样将其转化为输出吗?你只是想从字符串中提取日期,然后生成新的字符串?Steve,start_tm不是字符串而是时间戳。这些行仅是代表性的示例。所以,对于任何开始时间,我应该能够给它加上5分钟的间隔,直到它到达结束时间。如果不清楚,让我提供更多细节。那么您将start_dt和end_dt作为python日期时间对象?你只想创建5分钟间隔的所有datetime对象?我想他在寻找开始列和结束列。或者加上“导入日期时间”:)啊,两方面都是谢谢@AlexK@史蒂夫,如果你不介意的话,请你投票支持我的问题好吗?不知道为什么它会被淘汰!你好,埃斯潘塔。完成!在pandas
dataframe
和pyspark
dataframe
之间转换非常容易,您可以搜索其他答案来完成此操作。我希望我能接受您和Steve的两个答案。既然史蒂夫先回答了,我就接受了他的回答。谢谢你,伍兹!