基于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
相关产品推荐
相关产品推荐

