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

2024-04-26 05:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用频率字符串(偏移别名)获取Pandas DatetimeIndex中的句点数?例如,假设我有以下DatetimeIndex:

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

我想知道一周有多少次5分钟的月经,或者说“7D”。我可以“手动”计算:

^{pr2}$

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

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

两种方法似乎都不太有效。有没有更好的方式使用熊猫日期功能?在


Tags: 字符串pandasdatelenrange手动频率pd
2条回答

尝试使用numpy

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

out:
2016

我的测试,第一次导入time

^{pr2}$

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解决方案仍然是速度很重要的最快解决方案。在

相关问题 更多 >

    热门问题