pandas - индексирует фрейм данных другим фреймом - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть два примера данных для данных:

created_at             PM 2.5  PM 10     entry_id
2018-06-13 16:11:43    4.67   5.17        20
2018-06-14 11:16:43    5.01   8.05        21


                          action       end_at
done_at
2018-06-13 10:15:00  action 1           Nan
2018-06-11 12:15:00  action 2           Nan

Я хочу добавить значение «PM 10» ко второму кадру в зависимости от ближайшего времени от первого кадра данных.Новый фрейм данных должен выглядеть следующим образом:

                          action       end_at   PM 10
done_at
2018-06-13 10:15:00  action 1           Nan      5.17
2018-06-11 12:15:00  action 2           Nan      5.17

Проблема в том, что времена не совпадают друг с другом.Это возможно?

1 Ответ

0 голосов
/ 08 декабря 2018

Для этого вы можете использовать merge_asof, с direction='nearest'.Исходя из форматирования вашего примера данных, я предполагаю, что done_at является индексом, поэтому вам придется сначала сбросить индекс:

Настройка:

>>> df1
           created_at  PM 2.5  PM 10  entry_id
0 2018-06-13 16:11:43    4.67   5.17        20
1 2018-06-14 11:16:43    5.01   8.05        21
>>> df2
                       action end_at
done_at                             
2018-06-13 10:15:00  action 1    Nan
2018-06-11 12:15:00  action 2    Nan

df1['created_at'] = pd.to_datetime(df1['created_at'])

df2.index = pd.to_datetime(df2.index)

Слияние:

new_df = (pd.merge_asof(df2.reset_index().sort_values('done_at'),
              df1[['created_at','PM 10']],left_on='done_at',
              right_on='created_at', direction='nearest')
          .drop('created_at',axis=1))

>>> new_df
              done_at    action end_at  PM 10
0 2018-06-11 12:15:00  action 2    Nan   5.17
1 2018-06-13 10:15:00  action 1    Nan   5.17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...