在日期时间列上合并 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 个数据框的智能算法的主要内容,如果未能解决你的问题,请参考以下文章