Панды DatetimeIndex: количество периодов в строке частоты? - PullRequest
0 голосов
/ 01 марта 2019

Как я могу получить число периодов в Pandas DatetimeIndex, используя строку частоты (псевдоним смещения)?Например, допустим, у меня есть следующий DatetimeIndex:

idx = pd.date_range("2019-03-01", periods=10000, freq='5T')

Я хотел бы знать, сколько 5-минутных периодов в неделю, или «7D».Я могу вычислить это «вручную»:

periods = (7*24*60)//5

Или я могу получить длину фиктивного индекса:

len(pd.timedelta_range(start='1 day', end='8 days', freq='5T'))

Ни один из подходов не кажется очень эффективным.Есть ли лучший способ использования функции даты Pandas?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я наконец-то нашел разумное решение:

pd.to_timedelta('7D')//idx.freq

Это имеет то преимущество, что я могу указать диапазон, используя строку частоты (псевдоним смещения), а период или частота выводятся из кадра данных.NumPy решение, предложенное @Terry, по-прежнему является самым быстрым решением, где важна скорость.

0 голосов
/ 01 марта 2019

попробуйте использовать numpy

len(np.arange(pd.Timedelta('1 days'), pd.Timedelta('8 days'), timedelta(minutes=5)))

out:
2016

Мое тестирование, первый импорт time:

import time

решение OP:

start_time = time.time()
len(pd.timedelta_range(start='1 day', end='8 days', freq='5T'))
print((time.time() - start_time))

out:
0.0011057853698730469]

с использованием numpy

start_time = time.time()
len(np.arange(pd.Timedelta('1 day'), pd.Timedelta('8 days'), timedelta(minutes=5)))
print((time.time() - start_time))

out:
0.0001723766326904297

Следуйте предложению @meW, выполняя тест производительности, используя timeit

, используя timedelta_range:

%timeit len(pd.timedelta_range(start='1 day', end='8 days', freq='5T'))
out:
91.1 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

, используя numpy:

%timeit len(np.arange(pd.Timedelta('1 day'), pd.Timedelta('8 days'), timedelta(minutes=5)))
out:
16.3 µs ± 196 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...