在日期时间列上合并 2 个数据框的智能算法

Posted

技术标签:

【中文标题】在日期时间列上合并 2 个数据框的智能算法【英文标题】:Smart algo to merge 2 dataframes on datetime column 【发布时间】:2022-01-06 03:43:27 【问题描述】:

我有 2 个数据框,df1 是一些流量数据:

id  mtm_id  date_p  travel_d    ut_p    travel_t
0   1   2020-11-25 14:50:04 22.206  2.426   53.864
1   1   2020-11-25 15:50:05 22.214  1.578   35.049
2   1   2020-11-25 16:50:05 22.214  1.766   39.227
3   1   2020-11-25 17:50:05 22.206  1.75    38.867
4   1   2020-11-25 18:50:04 22.206  1.533   34.044
... ... ... ... ... ...
7408    1   2021-10-02 19:50:06 22.205  1.502   33.358
7409    1   2021-10-02 20:50:14 22.205  1.37    30.42
7410    1   2021-10-02 21:50:05 22.205  1.342   29.791
7411    1   2021-10-02 22:50:09 22.205  1.296   28.777
7412    1   2021-10-02 23:50:06 22.688  1.196   27.144

第二个df2是天气数据:

id date_w   temperature pressure    humidity    clouds  wind_speed
0   2017-04-09 16:00:00 281.4   1019    49  Clear : clear sky, 0%   4
1   2017-04-10 22:00:00 7.83    1012    81  Clear : ясно, 0%    3
2   2017-04-11 15:00:00 18  1002    42  Clear : ясно, 0%    9
3   2017-04-11 21:30:00 8.78    1003    93  Rain : дождь, 75%   5
4   2017-04-12 15:30:00 6.25    1002    60  Clouds : слегка облачно, 40%    5
... ... ... ... ... ... ...
7118    2021-10-03 06:17:52 4   1035    61  Clouds : облачно с прояснениями, 63%    2.08
7119    2021-10-03 12:18:14 10  1034    44  Clouds : облачно с прояснениями, 69%    2.1
7120    2021-10-03 18:17:42 5.19    1035    58  Rain : небольшой дождь, 100%    1.9
7121    2021-10-04 00:17:48 3.65    1036    71  Clouds : пасмурно, 98%  1.77
7122    2021-10-04 06:17:20 5.81    1037    71  Clouds : облачно с прояснениями, 55%    2.98

数据是独立收集的,因此表格中的日期不同。 我需要将 df1 中的每一行附加到 df2 中最接近日期时间的行( min(abs(date_p-date_w)) 以匹配(同步)流量和适当的天气数据及时)以获得最终表格:

id  mtm_id  date_p  travel_d    ut_p    travel_t date_w temperature pressure    humidity    clouds  wind_speed

我可以用循环的标准方式来做,但我想知道在向量操作中是否有任何 python 优雅的方式来做到这一点,而不是一步一步来(我相信 python 大师可以做任何事情!)) )。这也是代码执行速度的问题,这也很重要。

提前致谢。

【问题讨论】:

尝试使用merge_asof 我猜它只有在时间戳相等时才有效,有这样的解决方案***.com/questions/57375664/… 但可能有人可以以某种方式“模糊” date_p 以使其等于 date_w ... id 列是否与合并相关? 不,算了... 【参考方案1】:

实际上,merge_asof 在这种情况下非常有效,正如 Corralien 上面所说的 (Smart algo to merge 2 dataframes on datetime column) 所以,Pandas - how to merge dataframes on datetime column of different format? 的解决方案也适用于这种情况!

【讨论】:

以上是关于在日期时间列上合并 2 个数据框的智能算法的主要内容,如果未能解决你的问题,请参考以下文章

在 2 列上合并 pandas 数据帧,但以任意顺序

在数据框的其他列上使用多个日期列和条件注释热图

人工智能--第二天--KNN算法

Pandas:如何通过保留第一个数据框的信息来合并列上的两个数据框?

2019数据智能算法大赛赛后复盘

智能分页算法