Python - Подсчет количества итераций даты / времени между двумя датами с использованием freq - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь выяснить, как рассчитать количество итераций дат и времени между двумя датами, используя заданную частоту c (1D 3D 3H 15T)

, например:

freq = '3H'
start = datetime.datetime(2018, 8, 14, 9, 0, 0)
end= datetime.datetime(2018, 8, 15)
total = func(start, end, freq)

если freq = '3H' итого будет 5.

если freq = '30T' итого будет 30

как бы весело c выглядело бы?

РЕДАКТИРОВАТЬ Я оставляю свой исходный вопрос там и добавляю детали, которые я не смог добавить изначально, чтобы сделать вещи максимально простыми.

В коде, над которым я работаю, у меня есть Pandas DataFrame с DateTimeIndex. Мне нужно было рассчитать количество строк, начиная с указанного времени c (выше). Я думал о создании DataFrame, начиная с того времени и заполняя пропуски, и подсчитывая такие строки, но сейчас это кажется глупым.

функция, которую я в итоге использовал (с разбором), такова:

def periods(row, time_frame):
    start = datetime.datetime(2018, 8, 14, 9, 0, 0)
    end = row.name
    t = time_frame[-1:]
    n = int(re.findall('\d+',time_frame)[0])
    if t is 'H':
        freq = datetime.timedelta(hours=n)
    elif t is 'T':
        freq = datetime.timedelta(minutes=n)
    else:
        freq = datetime.timedelta(days=n)
    count = 0
    while start < end:
        start += freq
        count += 1
    return count

и я вызываю его с моего фрейма данных (подсвечников) следующим образом:

candlesticks['n'] = candlesticks.apply(lambda x: periods(x, candlesticks.index.freqstr), axis=1)

1 Ответ

1 голос
/ 09 января 2020

Используйте модуль timedelta в библиотеке datetime, и оттуда он по сути аналогичен сравнению чисел.

from datetime import timedelta

freq = timedelta(hours=3)

def periods(frequency, start, end):
    count = 0
    while start < end:
        start += frequency
        count += 1
    return count

p = periods(freq, start, end)

print(p)
>> 5
...