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

如何检查DataFrame A的timestamp是否处于B的timestamp加15分钟区间内

校验DataFrame时间戳区间匹配实现方案

首先提前处理:确保两个DataFrame的timestamp列均转换为pandas datetime类型,避免时间计算异常:

import pandas as pd

A['timestamp'] = pd.to_datetime(A['timestamp'])
B['timestamp'] = pd.to_datetime(B['timestamp'])

方法1:交叉合并校验(仅适合小数据量场景)

数据量较大时不推荐,交叉合并会生成笛卡尔积,占用过高内存

  • 生成B表时间区间的右边界
B['end_ts'] = B['timestamp'] + pd.Timedelta(minutes=15)
  • 交叉合并两张表所有行,筛选符合区间要求的匹配项
cross_df = A.assign(tmp=1).merge(B.assign(tmp=1), on='tmp', how='outer')
matched_ts = cross_df[
    (cross_df['timestamp_x'] >= cross_df['timestamp_y']) &
    (cross_df['timestamp_x'] < cross_df['end_ts'])
]['timestamp_x'].unique()
  • 给A表新增标记列,标识对应timestamp是否匹配成功
A['is_matched'] = A['timestamp'].isin(matched_ts)

方法2:merge_asof有序匹配(高性能,推荐全场景使用)

利用pandas原生有序匹配接口,不会生成笛卡尔积,性能远高于交叉合并方案

  • 先对两张表按timestamp升序排序
A_sorted = A.sort_values('timestamp').reset_index(drop=True)
B_sorted = B.sort_values('timestamp').reset_index(drop=True)
# 重命名B表的timestamp列避免合并时重名冲突
B_sorted = B_sorted.rename(columns={'timestamp': 'b_timestamp'})
  • 执行后向匹配,为A的每个timestamp匹配到最近的、小于等于它的B表timestamp
merged = pd.merge_asof(
    A_sorted,
    B_sorted[['b_timestamp']],
    left_on='timestamp',
    right_on='b_timestamp',
    direction='backward'
)
  • 校验匹配到的B表时间加15分钟是否覆盖A的timestamp,空值代表无匹配直接标记为False
merged['is_matched'] = merged['timestamp'] <= merged['b_timestamp'] + pd.Timedelta(minutes=15)
merged['is_matched'] = merged['is_matched'].fillna(False)

最终merged表的is_matched列就是A中每个timestamp的校验结果,True代表存在符合要求的B的时间区间,False代表不存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:12:04