Pandas基于时间范围高效合并DataFrame的指南

admin 百科 13

Pandas基于时间范围高效合并DataFrame的指南-第1张图片-佛山资讯网

本教程详细介绍了如何在Pandas中高效地合并两个DataFrame,其中一个DataFrame的时间列需要落在另一个DataFrame的两个时间列所定义的区间内。针对传统循环合并的性能瓶颈,文章提出并演示了利用NumPy广播机制进行向量化比较,从而实现显著的性能提升。教程涵盖了数据准备、广播逻辑、结果重构及重要的内存和索引处理注意事项。

在数据分析和处理中,我们经常需要根据复杂的条件来合并(join)或连接(merge)不同的数据集。当合并条件涉及到时间范围匹配时,例如判断一个时间点是否落在一个时间区间内,传统的基于循环的迭代方法往往效率低下,尤其是在处理大型数据集时。本教程将深入探讨如何利用Pandas和NumPy的强大功能,以高性能的方式解决这类时间范围合并问题。

场景描述

假设我们有两个Pandas DataFrame:

  • df1 包含时间区间信息,例如 time_1 和 time_2 列,以及其他数据 dummy_data。
  • df2 包含一系列时间点,例如 time_3 列,以及其他数据 dummy_data2。

我们的目标是:将 df2 中的每一行与 df1 中的行进行匹配,条件是 df2 的 time_3 值必须严格介于 df1 的 time_1 和 time_2 之间(即 time_1

示例数据结构:

df1 示例:

time_1 time_2 dummy_data
2023-10-01 04:02:00 2023-10-01 08:29:00 -245.67
2023-10-01 04:03:00 2023-10-01 08:49:00 -1772.95

df2 示例:

time_3 dummy_data2
2023-10-01 06:21:13.238024 -131.37
2023-10-01 06:47:19.796628 -236.28
2023-10-01 08:33:53.081095 -103.73

期望的输出结果:

time_1 time_2 dummy_data time_3 dummy_data2
2023-10-01 04:02:00 2023-10-01 08:29:00 -245.67 2023-10-01 06:21:13.238024 -131.37
2023-10-01 04:02:00 2023-10-01 08:29:00 -245.67 2023-10-01 06:47:19.796628 -236.28
2023-10-01 04:03:00 2023-10-01 08:49:00 -1772.95 2023-10-01 06:21:13.238024 -131.37
2023-10-01 04:03:00 2023-10-01 08:49:00 -1772.95 2023-10-01 06:47:19.796628 -236.28
2023-10-01 04:03:00 2023-10-01 08:49:00 -1772.95 2023-10-01 08:33:53.081095 -103.73

传统(低效)的解决方案

一种直观但效率低下的方法是使用嵌套循环遍历 df1 的每一行,然后对 df2 的 time_3 列应用 between 方法,最后通过 append 或 concat 逐行构建结果DataFrame。

标签: python go app 性能瓶颈

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~