如何提升多DataFrame匹配条件的索引查找速度?
优化方案
核心思路
先一次性计算所有车辆的最大时间,彻底避免循环里重复查询df2(这是原方法速度极低的核心原因),再通过pandas的向量化操作批量判断条件,完全替代低效的循环遍历。
具体实现步骤
预生成车辆-最大时间映射表
从df2按vehicle_id分组聚合,得到每个车辆对应的最大时间,生成一个可快速查询的Series:# 统一列名避免大小写/符号带来的问题 df2 = df2.rename(columns={'Time(s)': 'time_s'}) # 一次计算所有车辆的最大时间 max_time_map = df2.groupby('vehicle_id')['time_s'].max()批量关联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)向量化筛选符合条件的索引
直接通过布尔索引筛选出时间差绝对值大于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
相关产品推荐
相关产品推荐

