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

如何提升多DataFrame匹配条件的索引查找速度?

优化方案

核心思路

先一次性计算所有车辆的最大时间,彻底避免循环里重复查询df2(这是原方法速度极低的核心原因),再通过pandas的向量化操作批量判断条件,完全替代低效的循环遍历。

具体实现步骤

  1. 预生成车辆-最大时间映射表
    从df2按vehicle_id分组聚合,得到每个车辆对应的最大时间,生成一个可快速查询的Series:

    # 统一列名避免大小写/符号带来的问题
    df2 = df2.rename(columns={'Time(s)': 'time_s'})
    # 一次计算所有车辆的最大时间
    max_time_map = df2.groupby('vehicle_id')['time_s'].max()
    
  2. 批量关联com表的车辆时间数据
    用map方法把com中v1和v2对应的最大时间批量关联过来,生成新列:

    com['v1_max_time'] = com['v1'].map(max_time_map)
    com['v2_max_time'] = com['v2'].map(max_time_map)
    
  3. 向量化筛选符合条件的索引
    直接通过布尔索引筛选出时间差绝对值大于60的行,提取其索引即可:

    # 计算时间差并筛选,最终得到符合条件的com索引列表
    result_indices = com[abs(com['v1_max_time'] - com['v2_max_time']) > 60].index.tolist()
    

性能对比说明

  • 原循环方法每次迭代都要对df2执行两次布尔索引+求最大值,时间复杂度为O(m*n)(m是com行数,n是df2行数),40M行数据下完全无法高效运行。
  • 优化后的方法时间复杂度为O(n + m),仅需一次聚合、两次映射和一次向量化判断,速度能提升几个数量级,百万级甚至千万级数据都能在秒级完成处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:10:25