【问题标题】:Extract information from closest timestamp in separate dataframe pandas从单独的数据框 pandas 中的最近时间戳中提取信息
【发布时间】:2018-11-23 08:09:31
【问题描述】:

我有两个数据帧,一个是来自固定位置的浮标的连续数据(每 15 秒采集一次),另一个是在不同位置以许多不同时间间隔采集的观察数据。两者在各自的数据帧中都有一致的时间戳。对于每个观察,我需要获取观察的时间戳并在连续数据框中找到最接近的时间戳,从该行中提取信息,并将其添加到观察中。我很难找到一种方法来使用我的系列在连续数据中找到最接近的时间戳。

观察数据:

   counter    depth  latdeg   latmin     latdec  londeg  lonmin    ts
0      100001   21.110      72  18.5412  72.309020    -148 -47.071 2018-03-20 17:21:49+01:00
1      100002   22.140      72  18.5448  72.309080    -148 -47.0785 2018-03-20 17:22:07+01:00
2      100003   45.300      72  18.5396  72.308993    -148 -47.0936 2018-03-20 17:34:38+01:00
3      100004   45.310      72  18.5360  72.308933    -148 -47.0974 2018-03-20 17:36:31+01:00

连续数据:

    sec sat lat long    alt time
4164    62460   9   72.31061472 -148.790606 -6.9809 2018-03-20 17:21:00+01:00
4165    62475   9   72.31061655 -148.7906147    -7.0923 2018-03-20 17:21:15+01:00
4166    62490   9   72.31061099 -148.7906154    -7.7008 2018-03-20 17:21:30+01:00
4167    62505   9   72.31060295 -148.7906237    -8.3746 2018-03-20 17:21:45+01:00
4168    62520   9   72.31059877 -148.7906251    -7.5989 2018-03-20 17:22:00+01:00

例如,我想使用obs[0]['ts'] 并在cont['time'] 中找到最近时间的索引,即4167,然后将lat long 和alt 附加到观察数据帧中。

【问题讨论】:

    标签: python pandas dataframe timestamp date-comparison


    【解决方案1】:

    您正在寻找pandas.merge_asof

    它允许您在不精确的键上连接两个 DataFrame。在这种情况下,您希望将其与 direciton = nearest 一起使用,以根据两个最接近的时间戳进行匹配。

    import pandas as pd
    
    pd.merge_asof(df_obs, df_cont[['lat', 'long', 'alt', 'time']], 
                  left_on='ts', right_on='time', direction='nearest')
    

    输出:

       counter  depth  latdeg   latmin     latdec  londeg   lonmin                  ts        lat        long     alt                time
    0   100001  21.11      72  18.5412  72.309020    -148 -47.0710 2018-03-20 16:21:49  72.310603 -148.790624 -8.3746 2018-03-20 16:21:45
    1   100002  22.14      72  18.5448  72.309080    -148 -47.0785 2018-03-20 16:22:07  72.310599 -148.790625 -7.5989 2018-03-20 16:22:00
    2   100003  45.30      72  18.5396  72.308993    -148 -47.0936 2018-03-20 16:34:38  72.310599 -148.790625 -7.5989 2018-03-20 16:22:00
    3   100004  45.31      72  18.5360  72.308933    -148 -47.0974 2018-03-20 16:36:31  72.310599 -148.790625 -7.5989 2018-03-20 16:22:00
    

    然后,如果您不想要 time 列,您可以删除它,我只是将其保留以说明合并是如何工作的。

    【讨论】:

    • 我收到 "ValueError: left keys must be sorted" ,它们就是这样,并且在扎根之后,如果时间戳中有任何 NaN 值,似乎会发生这种情况,但我的数据帧没有有什么。你对这个错误有任何想法吗?谢谢,这绝对是比我之前尝试的更好的方法。
    • @PatriciaNelsen 抱歉回复晚了!是的,合并的一个警告是您需要首先对要合并的键进行排序,否则它将不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2018-11-09
    • 2020-08-14
    • 2020-12-09
    相关资源
    最近更新 更多