本文介绍使用 `pandas.merge_asof()` 高效实现跨 dataframe 的时间区间匹配,避免低效的嵌套循环,在百万级数据下仍保持秒级响应。
在数据分析中,常需将一个事件表(如设备操作日志)与一个时段表(如工单生效区间)按主键+时间范围关联,并将时段表中的字段(如 VALUE)作为新列注入事件表。若采用双重 for 循环逐行比对(如 df1[‘EVENT_TIME’] 是否落在 df2[‘IN_TIME’] 与 df2[‘OUT_TIME’] 之间),时间复杂度为 O(n×m),面对 10 万+ 行数据时极易超时(如原问题中耗时 >10 分钟)。幸运的是,Pandas 提供了专为此类场景优化的 merge_asof() 方法——它基于排序后的一对多最近匹配机制,配合后续逻辑过滤,可将性能提升数十倍。
✅ 正确做法:merge_asof + 时间范围校验
核心思路分三步: