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

基于Pandas迭代DataFrame匹配最近前后时间值并关联数据

Pandas处理CSV时间匹配与数据合并

实现步骤与代码

1. 读取并预处理文件

先读取两个CSV文件,对CSV B做列筛选,同时将Date/Time解析为时间格式(这是后续时间对比的核心前提):

import pandas as pd

# 读取CSV A,解析时间列
df_a = pd.read_csv('csv_a.csv', parse_dates=['Date/Time'])
# 读取CSV B,仅保留指定列并解析时间
df_b = pd.read_csv('csv_b.csv', usecols=['Date/Time', 'Col2', 'Col4'], parse_dates=['Date/Time'])
# 对CSV B的时间列排序,保证查找有序性
df_b = df_b.sort_values('Date/Time').reset_index(drop=True)

2. 匹配前序/后序时间及对应Col2数据

使用Pandas的searchsorted方法高效定位时间位置,替代逐行迭代提升效率:

# 提取CSV B的时间序列
b_time_series = df_b['Date/Time']

# 获取每个CSV A时间在B时间序列中的插入位置
insert_indices = b_time_series.searchsorted(df_a['Date/Time'], side='left')

# 匹配前序时间与对应Col2
df_a['prev_time'] = b_time_series.iloc[insert_indices - 1].values
df_a['prev_col2'] = df_b['Col2'].iloc[insert_indices - 1].values

# 匹配后序时间与对应Col2,处理边界情况(A时间晚于B所有时间时取最后一条)
valid_next_indices = insert_indices.where(insert_indices < len(b_time_series), len(b_time_series) - 1)
df_a['next_time'] = b_time_series.iloc[valid_next_indices].values
df_a['next_col2'] = df_b['Col2'].iloc[valid_next_indices].values

3. 生成并保存合并结果

处理完成后直接导出为新CSV:

df_a.to_csv('merged_result.csv', index=False)

关键提示

  • searchsorted是面向有序序列的高效查找方法,比手动循环迭代速度快数倍,适合大数据量场景
  • 必须先对CSV B的时间列排序,否则无法准确找到前后序时间
  • 边界处理逻辑:若CSV A的时间早于B中所有时间,前序时间取B的第一条;若A时间晚于B中所有时间,后序时间取B的最后一条

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:42:43