问题描述
我有一个紧密循环,除其他外,它检查给定日期(以 pandas.Timestamp
的形式)是否包含在给定的 unique pandas.DatetimeIndex
(应用程序正在检查某个日期是否为自定义工作日)。
作为一个最小的例子,考虑这一点:
import pandas as pd
dates = pd.date_range("2020","2021")
index = dates.to_series().sample(frac=0.7).sort_index().index
for date in dates:
if date in index:
# Do stuff...
(请注意,在整个应用程序中,简单地迭代 index
不是一个选项)
令我惊讶的是,我发现 date in index
位占据了整个运行时间的很大一部分。分析进一步表明 Pandas 的成员资格检查不仅仅是哈希查找,这一点通过比较 DatetimeIndex
与普通 python set
的小实验进一步证实:
%timeit [date in index for date in dates]
# 3.28 ms ± 81.9 µs per loop (mean ± std. dev. of 7 runs,100 loops each)
对比
index_set = set(index)
%timeit [date in index_set for date in dates]
# 341 µs ± 3.42 µs per loop (mean ± std. dev. of 7 runs,1000 loops each)
请注意,差异几乎是 10 倍!为什么会有这种差异,我能做些什么来让它更快吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)