Поиск ближайшего значения на основе datetime в pandas

#python #pandas

#python #pandas

Вопрос:

У нас есть датчик, который записывает ‘x’, когда сообщает другой датчик. Это означает, что наблюдение выполняется в случайное время и со случайной частотой в течение часа. Вот как выглядят данные

 > df
date         time        x
1/1/2018     00:24:12    10
1/1/2018     00:47:17    14
1/1/2018     1:17:11     12
1/1/2018     1:34:34     17
1/1/2018     1:52:23     15
1/1/2018     2:10:59     12
  

и так далее до 31/1/2018. Чтобы сравнить его с другим набором данных, я хочу найти значение, записанное в момент, ближайший к часовой отметке. Пример:

 date         time     x
1/1/2018      00      10
1/1/2018      01      14 (Since 00:47:17 is -13 minutes to 01 as compared to 1:17:11 which is   17 minutes)
1/1/2018      02      15
  

Ответ №1:

DatetimeIndex Сначала создайте, затем date_range с Timestamp.floor помощью и в последнюю DataFrame.reindex очередь с помощью method='nearest' :

 df.index = pd.to_datetime(df['date']   ' '   df['time'])
rng = pd.date_range(df.index.min().floor('H'), df.index.max().floor('H'), freq='H')

df = df.reindex(rng, method='nearest')
print (df)
                         date      time   x
2018-01-01 00:00:00  1/1/2018  00:24:12  10
2018-01-01 01:00:00  1/1/2018  00:47:17  14
2018-01-01 02:00:00  1/1/2018   1:52:23  15
  

Последнее, если необходимо, удалите DatetimeIndex :

 df = df.reindex(rng, method='nearest').reset_index(drop=True)
print (df)
       date      time   x
0  1/1/2018  00:24:12  10
1  1/1/2018  00:47:17  14
2  1/1/2018   1:52:23  15