更快的熊猫 DatetimeIndex 成员资格检查

问题描述

我有一个紧密循环,除其他外,它检查给定日期(以 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 (将#修改为@)