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

对比两个CSV文件时间戳,实现Data.csv与Stamps.csv区间匹配

时间区间匹配解决方案(Pandas)

嘿,我来帮你搞定这个把Data条目匹配到Stamps时间区间的问题!针对你36万行的Data和800行的Stamps,咱们用矢量化操作来保证效率,绝对比循环快N倍。

步骤1:确保时间列正确解析

首先得确认两个DataFrame的时间字段都是datetime64类型,避免后续匹配出错。如果之前的read_csv没自动解析,重新载入时显式指定:

import pandas as pd

# 载入并解析时间列
df_stamps = pd.read_csv("Stamps.csv", parse_dates=["start date", "end date"])
df_data = pd.read_csv("Data.csv", parse_dates=["date time"])

步骤2:高效匹配时间区间

这里用Pandas的IntervalIndex来实现快速区间匹配,完全矢量化,处理36万行毫无压力:

# 创建区间索引,closed参数控制区间闭合方式:
# - 'both':左闭右闭(包含start和end)
# - 'left':左闭右开(包含start,不包含end)
# 根据你的实际业务需求调整
interval_idx = pd.IntervalIndex.from_arrays(
    df_stamps['start date'], 
    df_stamps['end date'], 
    closed='both'
)

# 找到每个Data时间点对应的区间索引位置
# 返回的idx_pos是数组,每个元素对应df_stamps中的行索引,-1表示无匹配
idx_pos = interval_idx.get_indexer(df_data['date time'])

# 给df_data新增一列,存储匹配到的Stamps的id
df_data['matched_id'] = df_stamps['id'].iloc[idx_pos].values

# 可选:把无匹配的条目设为NaN(或者你想要的默认值)
df_data['matched_id'] = df_data['matched_id'].where(idx_pos != -1, pd.NA)

关键说明

  • 这个方法的核心是矢量化计算,避免了逐行循环的低效,36万行数据几秒就能处理完
  • 如果你的时间区间是左闭右开的,记得把closed参数改成'left'
  • 要是有Data的时间点不在任何Stamps区间里,matched_id会被设为pd.NA,你可以根据需求替换成其他值(比如0或者特定标记)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:49:21