Создать 5-минутный интервал между двумя отметками времени - PullRequest
0 голосов
/ 24 марта 2019

У меня есть куча точек данных, для каждого есть два столбца: start_dt и end_dt. Мне интересно, как я могу разделить промежуток времени между 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

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

и т. Д.

есть ли какая-либо функция из коробки для этого?

Если нет, любая помощь в создании этой функции замечательна

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Я не знаю 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

output

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
1 голос
/ 24 марта 2019

Если у вас есть два объекта даты и времени Python, представляющих промежуток времени, и вы просто хотите разбить этот промежуток времени на 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

Это должно обрабатывать период, который не кратен дельте, давая вам более короткий интервал в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...