Pandas DatetimeIndex:频率字符串中的周期数?

Pandas DatetimeIndex: Number of periods in a frequency string?

如何使用频率字符串(偏移量别名)计算 Pandas DatetimeIndex 中的周期数?例如,假设我有以下 DatetimeIndex:

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

我想知道一周有多少个 5 分钟时段,或“7D”。我可以计算这个 "manually":

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

或者我可以获得虚拟索引的长度:

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

这两种方法似乎都不太有效。使用 Pandas 日期功能有更好的方法吗?

尝试使用 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)

我终于想出了一个合理的解决方案:

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

这样做的好处是我可以使用频率字符串(偏移量别名)指定一个范围,并且可以从数据帧中推断出周期或频率。 @Terry 建议的 numpy 解决方案仍然是速度很重要的最快解决方案。