You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中DatetimeIndex与IntervalIndex交集匹配高效设空方案

Pandas时间序列批量区间置空高效实现方案

前置要求

确保measures的DatetimeIndex为升序排列,时间序列场景下一般默认满足,未排序可执行measures.sort_index(inplace=True)完成预处理,一次性排序成本极低。

实现代码

import pandas as pd
import numpy as np

# 自定义窗口大小,示例为前后5秒
offset = pd.Timedelta(seconds=5)
# 生成所有事件对应的区间上下界
event_starts = events - offset
event_ends = events + offset

# 转为numpy数组加速向量化运算
dt_measures = measures.index.values
dt_starts = event_starts.values
dt_ends = event_ends.values

# 批量查找所有区间边界在measures索引中的位置
left_pos = np.searchsorted(dt_measures, dt_starts, side="left")
right_pos = np.searchsorted(dt_measures, dt_ends, side="right")

# 差分计数法生成掩码,无遍历开销
cnt = np.zeros(len(dt_measures) + 1, dtype=np.int8)
np.add.at(cnt, left_pos, 1)
np.add.at(cnt, right_pos, -1)
mask = np.cumsum(cnt)[:-1] > 0

# 一次性完成置空操作
measures.loc[mask, :] = np.nan

性能表现

在events长度10000、measures长度1525229的测试场景下,该方案总耗时稳定在0.1~0.3秒,远优于现有测试方案。

实现原理

该方案利用时间序列有序的特性,完全避免逐行遍历、逐次索引赋值的开销,所有运算均为numpy层面的向量化操作。内存占用极低,仅需额外生成两个与measures等长的数组,150万条数据对应的额外内存开销不足2MB,无内存不足风险。

注意事项

  • events无需提前排序,不影响计算结果
  • 兼容measures索引存在重复值的场景
  • 调整窗口大小仅需修改offset参数即可,支持任意时间粒度的窗口设置

内容的提问来源于stack exchange,提问作者kubatucka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:36:05