从单独的数据帧熊猫中的最近时间戳中提取信息

时间:2018-06-13 16:46:35

标签: python pandas dataframe timestamp date-comparison

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

观察数据:

    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中最接近时间的索引,即gulp.task('watch', ['tasks', 'you', 'want', 'to', 'run'], function(){ // sass and js watch functions gulp.watch('./Views/**/*.cshtml').on('change', browserSync.reload); }); ,然后将lat long和alt追加到观察数据框。

1 个答案:

答案 0 :(得分:0)

您正在寻找 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列,我只是将其保留以明确合并的工作原理。