Сравните два кадра данных и сохраните заданный c диапазон времени и даты другого - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть два кадра данных с отметками времени. Я хочу выбрать отметки времени из df1, которые равны отметкам времени 'start_show' из df2, но также сохранить все отметки времени df1 за 2 часа до и через 2 часа после (из df1), где отметки времени равны.

df1:

       van_timestamp         weekdag
2880    2016-11-19 00:00:00    6
2881    2016-11-19 00:15:00    6
2882    2016-11-19 00:30:00    6
...            ...            ...
822349  2019-11-06 22:45:00    3
822350  2019-11-06 23:00:00    3
822351  2019-11-06 23:15:00    3

df2:

            einde_show               start_show
255     2016-01-16 22:00:00      2016-01-16 20:00:00
256     2016-01-23 21:30:00      2016-01-23 19:45:00
257     2016-01-26 21:30:00      2016-01-26 19:45:00
...                ...                    ...
1111    2019-12-29 18:30:00      2019-12-29 17:00:00
1112    2019-12-30 15:00:00      2019-12-30 13:30:00
1113    2019-12-30 18:30:00      2019-12-30 17:00:00

df1 содержит отметку времени каждые 15 минут каждого дня, тогда как df2['start_show'] содержит только одну отметка времени в день.

Итак, в конечном итоге я хочу достичь того, чтобы для каждой отметки времени df2 у меня была соответствующая отметка времени df1 + - 2 часа.

Пока я мы пробовали:

df1['van_timestamp'][df1['van_timestamp'].isin(df2['start_show'])]

Выбирает правильные метки времени. Теперь я хочу выбрать все из df1 в диапазоне

+ pd.Timedelta(2, unit='h')
- pd.Timedelta(2, unit='h')

Но я не уверен, как go об этом. Помощь будет высоко ценится!

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2020

Я получил это работает (безобразное исправление). Я создал диапазон даты и времени

dates = [pd.date_range(start = df2['start_show'].iloc[i] - pd.Timedelta(2, unit='h'), end = df2['start_show'].iloc[i], freq = '15T') for i in range(len(evs_data))]

, который я тогда не перечислил:

dates = [i for sublist in dates for i in sublist]

Впоследствии я сравнил фрейм данных с этим списком.

relevant_timestamps = df1[df1['van_timestamp'].isin(dates)]

Если у кого-то еще есть лучшее решение, пожалуйста, дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...