Слейтесь с ближайшей минутой, используя панд - PullRequest
0 голосов
/ 20 февраля 2019

Я просто хочу объединить два кадра данных с интервалом ± 1 мин.

Здесь name_df с набором данных для примера:

Name    Date
A       2/19/2019 17:16:15
B       2/19/2019 17:19:46
C       2/19/2019 17:23:03

Другой дата_фрейма job_df:

Job         Datestamp
Engineer    2/19/2019  17:15:56 
Dancer      2/19/2019  17:19:27 
Singer      2/19/2019  17:22:44 

Вот то, что я пытался реализовать, но этот метод пропускает некоторые строки, которыеперешел на другую сторону 1 минуты (например, <30 секунд округления вниз,> 30 циклов вверх):

name_df['Date&Time'] = name_df['Date&Time'].dt.round('1min')
job_df['Date&Time'] = job_df['Date&Time'].dt.round('1min')

merged_df = pd.merge(name_df, job_df, on='Date&Time')

Любая помощь в этом очень ценится!

1 Ответ

0 голосов
/ 13 марта 2019

Вот потенциальный метод для выполнения того, что вы описываете:

  1. Создайте новый фрейм данных (например, time_df), который содержит дату и метки времени из name_df и job_df
  2. Сортировка time_dfв порядке возрастания
  3. Создайте дополнительный столбец в time_df, чтобы указать уникальный номер группы для каждого набора дат и отметок времени, которые находятся в пределах минуты друг от друга
  4. Заполните этот новый столбец, вычислив разницув секундах между первой датой и отметкой времени и теми, которые следует за ней, давая каждому из них один и тот же уникальный номер группы, если разница составляет 120 секунд или меньше.
  5. Как только разница превысит 120 секунд, увеличьте номер группы и повторите процесс со следующей несгруппированной строкой.
  6. После присвоения всем строкам номера группы объедините time_df обратнов name_df и job_df в столбце отметки времени даты, сохраняя только данные, соответствующие каждому исходному фрейму данных, соответственно
  7. Наконец, выполните объединение, используя столбец номера группы из каждого из двух фреймов данных

В конечном итоге, если вы хотите сгруппировать их в интервале +/- 1 минута, вы можете сделать это несколькими способами в зависимости от того, начинаете ли вы с начальной или конечной даты и времени.Если у вас есть последовательность последовательно увеличивающихся времен, каждый из которых составляет менее 120 секунд, вы можете сгруппировать их в скобки по +/- 1 минуте несколькими способами.Вышеупомянутый метод позволит вам делать это систематически таким образом, чтобы предотвратить некоторые из проблем, которые вы описываете, но в конечном итоге может быть невозможно полностью избежать этого.

С учетом сказанного, было бы легчеПопробуйте другой метод округления, такой как np.floor или np.ceil или их эквивалент.Кажется несколько произвольным решать, когда округлять вверх или когда округлять в каждом конкретном случае.Наконец, как только вы определили, что две метки времени находятся в пределах минуты друг от друга, вам может потребоваться решить, какую метку времени связать с ними обеими.Возможно, использование среднего времени может быть хорошим решением.

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