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

Pandas高效筛选动态日期范围实现GPS点关联行程ID的方法

GPS点位与行程ID高效关联方案

原有代码性能瓶颈

原有循环方案效率低主要来自三个核心问题:

  • iterrows是Python层逐行遍历,每一行都要做类型拆包转换,执行开销极高
  • 每次调用points.append()都会生成全新的DataFrame,内存拷贝成本随数据量线性上升
  • 单条行程重复做布尔索引筛选点位,存在大量冗余计算

优化方案1:pandas原生向量化实现(无额外依赖,性能提升100倍以上)

利用pandas内置的merge_asof做时间区间匹配,全流程为C实现的向量化运算,无需Python层循环,5万行程+200万点位总耗时通常在10秒以内。

前置预处理

import pandas as pd

# 统一转换时间字段为datetime类型,确保时区一致
df_trips['start'] = pd.to_datetime(df_trips['start'])
df_trips['stop'] = pd.to_datetime(df_trips['stop'])
df_points['dateTime'] = pd.to_datetime(df_points['dateTime'])

# 过滤无效行程(结束时间早于开始时间)
df_trips = df_trips[df_trips['stop'] > df_trips['start']].reset_index(drop=True)

# 两个表都按device+时间字段排序,merge_asof要求数据有序
df_trips = df_trips.sort_values(by=['device', 'start']).reset_index(drop=True)
df_points = df_points.sort_values(by=['device', 'dateTime']).reset_index(drop=True)

核心匹配逻辑

# 按device关联,匹配点位时间之前最近的行程start
merged = pd.merge_asof(
    df_points,
    df_trips,
    left_on='dateTime',
    right_on='start',
    by='device',
    direction='backward'
)

# 过滤出落在行程时间区间内的点位
result = merged[merged['dateTime'] <= merged['stop']].reset_index(drop=True)

# 保留需要的字段输出
result = result[['dateTime', 'device', 'point_id', 'trip_id']]
result.to_csv('TripPoints.csv', index=False)
print(f"匹配到的点位数量:{len(result)}")

注意:该方案默认同一device下行程无时间重叠,点位会匹配到时间最近的对应行程。如果存在行程重叠需要匹配所有关联行程,用方案2。


优化方案2:支持重叠行程的SQL关联实现

如果同一device存在行程时间重叠,需要将点位匹配到所有包含该时间的行程,可借助内存SQLite做区间关联,逻辑简单直观,200万点位+5万行程总耗时通常在30秒以内。

import sqlite3

# 创建内存级SQLite连接
conn = sqlite3.connect(':memory:')

# 将DataFrame写入临时表
df_trips.to_sql('trips', conn, index=False)
df_points.to_sql('points', conn, index=False)

# 执行区间关联查询
query = """
SELECT p.dateTime, p.device, p.point_id, t.trip_id
FROM points p
INNER JOIN trips t 
ON p.device = t.device 
AND p.dateTime > t.start 
AND p.dateTime < t.stop
"""
result = pd.read_sql(query, conn)
conn.close()

# 输出结果
result.to_csv('TripPoints.csv', index=False)
print(f"匹配到的点位数量:{len(result)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:02