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

使用Python Pandas匹配两DataFrame的time列并关联对应行数据

解决DataFrame时间列近邻匹配并关联数据的方案

这是个非常常见的时间序列数据匹配需求,用pandas的merge_asof函数就能高效搞定,完全不用逐行遍历(那对5万+2万的数据量来说会慢到离谱)。下面是具体的步骤和代码:

核心思路

merge_asof是pandas专门为按键的最近邻匹配设计的工具,它会先对两个DataFrame按匹配键排序,然后快速为右表(这里是df2)的每一行在左表(df1)中找到最接近的键值,再把对应行的所有列合并过来。

具体步骤

1. 先对两个DataFrame按'time'列排序

merge_asof要求两个表必须按匹配的键(也就是'time')排序,这是前提:

import pandas as pd

# 对df1和df2按time列排序,重置索引避免原索引干扰
df1_sorted = df1.sort_values('time').reset_index(drop=True)
df2_sorted = df2.sort_values('time').reset_index(drop=True)

2. 执行近邻匹配合并

用direction='nearest'参数指定找最接近的time值:

# 合并df2和df1,匹配最接近的time,保留df2的所有行并关联df1的对应列
result_df = pd.merge_asof(
    df2_sorted, 
    df1_sorted, 
    on='time', 
    direction='nearest'
)

参数说明

  • on='time':指定用来匹配的列名
  • direction='nearest':寻找与df2的time值最接近的df1的time值(不管是比它大还是小)。如果需要只找不大于df2 time的最近值,用direction='backward';只找不小于的用direction='forward'

效果示例

举个简单的小例子帮你理解:
假设df1是:

timevelyaw
661525
702030

df2是:

timeother_data
67sample1

执行合并后,result_df会变成:

timeother_datavelyaw
67sample11525

完全符合你要的“把df1对应行的vel、yaw关联到df2对应行”的需求。

额外注意点

  • 如果你的'time'列是datetime类型(比如YYYY-MM-DD HH:MM:SS),这个方法同样适用,只要确保列是datetime64格式即可,不需要额外转换。
  • 这个方法的时间复杂度是O(M log N),比逐行遍历的O(M*N)效率高太多,处理你的5万+2万数据量完全没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:22:26