Pandas DatetimeIndex: Number of periods in a frequency string?

回眸只為那壹抹淺笑 提交于 2021-01-29 08:24:41

问题


How can I get a count of the number of periods in a Pandas DatetimeIndex using a frequency string (offset alias)? For example, let's say I have the following DatetimeIndex:

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

I would like to know how many 5 minute periods are in a week, or '7D'. I can calculate this "manually":

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

Or I can get the length of a dummy index:

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

Neither approach seems very efficient. Is there a better way using Pandas date functionality?


回答1:


try using numpy

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

out:
2016

My testing, first import time:

import time

the OP solution:

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

out:
0.0011057853698730469]

using 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

Follow the sugestion of @meW, doing the performance test using timeit

using 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)

using 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)



回答2:


I finally figured out a reasonable solution:

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

This has the advantage that I can specify a range using a frequency string (offset alias) and the period or frequency is inferred from the dataframe. The numpy solution suggested by @Terry is still the fastest solution where speed is important.



来源:https://stackoverflow.com/questions/54945550/pandas-datetimeindex-number-of-periods-in-a-frequency-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!