python数据处理——匹配最近的时间戳

本文介绍了一种在Pandas中高效匹配两个不规则时间序列的方法,利用numpy的searchsorted函数,确保匹配的时间戳对中第一个时间戳小于或等于第二个,并且是所有可能对中最接近的。此方法适用于毫秒级精度的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题 pandas.merge:匹配最近的时间戳> =时间戳系列

我有两个数据帧,两个数据帧都包含一个不规则间隔的毫秒分辨率时间戳列。我的目标是匹配行,以便对于每个匹配的行,1)第一个时间戳总是小于或等于第二个时间戳,2)匹配的时间戳对于满足1)的所有时间戳对最接近

 

关键函数名称位searchsort(),这是一个在numpy下的函数,使用的方法如下所示:

import pandas as pd
import numpy as np
np.random.seed(0)

base = np.array(["2013-01-01 00:00:00"], "datetime64[ns]")

a = (np.random.rand(30)*1000000*1000).astype(np.int64)*1000000
t1 = base + a
t1.sort()

b = (np.random.rand(10)*1000000*1000).astype(np.int64)*1000000
t2 = base + b
t2.sort()

使用 searchsorted() 找到索引 t1 对于每一个 t2

idx = np.searchsorted(t1, t2) - 1
mask = idx >= 0

df = pd.DataFrame({"t1":t1[idx][mask], "t2":t2[mask]})

输出如下所示:

                         t1                         t2
0 2013-01-02 06:49:13.287000 2013-01-03 16:29:15.612000
1 2013-01-05 16:33:07.211000 2013-01-05 21:42:30.332000
2 2013-01-07 04:47:24.561000 2013-01-07 04:53:53.948000
3 2013-01-07 14:26:03.376000 2013-01-07 17:01:35.722000
4 2013-01-07 14:26:03.376000 2013-01-07 18:22:13.996000
5 2013-01-07 14:26:03.376000 2013-01-07 18:33:55.497000
6 2013-01-08 02:24:54.113000 2013-01-08 12:23:40.299000
7 2013-01-08 21:39:49.366000 2013-01-09 14:03:53.689000
8 2013-01-11 08:06:36.638000 2013-01-11 13:09:08.078000

此外,关于本文中提到的关键的函数,这篇文章也有稍微的讲解:

https://my.oschina.net/u/3906518/blog/1844187

### 数据流中时间戳的使用与处理方法 在数据流中,时间戳是一个非常重要的概念,它用于标记事件发生的具体时刻或者表示某个时间段。以下是关于如何在不同场景下处理时间戳的一些常见方法: #### 1. 音视频采集中的时间戳记录方案 在音视频数据采集过程中,为了确保每帧数据能够被准确定位并同步播放,通常需要为每一帧计算时间戳。可以通过设置“起始时间为系统当前时间”的方式来初始化第一帧的时间戳[^1]。随后,基于固定帧率假设,通过累加固定的帧间隔值生成后续各帧的时间戳。 然而,在实际应用中可能会存在误差累积的情况,因此建议引入动态校正机制定期监测已累计时间戳与真实系统时间之间的差异,并适时调整以减少漂移效应的影响。 #### 2. 推送至服务器端时的时间戳管理策略 当涉及到向远程服务传输媒体流(如RTMP协议)时,合理配置时间戳显得尤为重要。某些特定推送库(例如EasyRTMP_HIK),其内部逻辑可能已经包含了自动计算时间戳的功能;在这种情况下,除非能提供完全精确的手动设定值,否则好让底层自行完成这一任务以免引发冲突或异常行为[^2]。 另外值得注意的是,即使允许外部定义时间戳参数的情况下也应谨慎操作——一旦提交了不恰当的数据可能导致整个流程失败甚至影响终用户体验质量下降等问题出现[^2]。 #### 3. 利用TCP选项优化网络性能监控 除了多媒体领域外,在更广泛的计算机通信范畴内同样存在着针对时间戳的有效运用实例。比如利用TCP头部携带额外字段信息来进行延迟测量分析就是一个典型例子[^3]。这种方法不仅可以帮助区分往返路径上的不对称特性而且还能进一步细化到单方向链路状态评估层面从而更好地支持QoS决策制定等工作需求[^3]。 #### 4. 离线环境下的多模态传感器融合技术探讨 对于那些涉及多个异构源产生的连续型信号序列匹配任务而言,则往往需要用到更加复杂的算法模型才能达成预期目标效果。举例来说,在自动驾驶汽车项目开发期间经常遇到需将激光雷达扫描结果同摄像头拍摄画面相结合的情形之下便采用了如下所示Python脚本片段实现了初步筛选配对目的[^4]: ```python import os from datetime import timedelta, datetime def find_nearest_image(pcd_time_str, image_dir): pcd_time = datetime.strptime(pcd_time_str[:-7], "%Y%m%d_%H%M%S.%f") min_diff = float('inf') nearest_img_name = "" for img_file in os.listdir(image_dir): try: img_time_str = img_file.split('.')[0].split('_')[-1] img_time = datetime.strptime(img_time_str[:8]+"_"+img_time_str[9:],"%Y%m%d_%H%M%S%f") diff = abs((pcd_time-img_time).total_seconds()) if(diff<min_diff): min_diff=diff nearest_img_name=img_file except Exception as e: continue return nearest_img_name,min_diff nearest_image,difference_in_sec=find_nearest_image("20230506_143020.123","./images/") print(f"The closest image is {nearest_image} with difference of {difference_in_sec}s.") ``` 上述代码展示了如何遍历图像文件夹寻接近给定PCD文件创建瞬间的那一张照片作为对应关系建立依据之一部分过程描述。 --- 问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化橙同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值