Pandas удалить повторяющиеся строки по времени - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующий фрейм данных, который представляет историю обслуживания:

                  Start                    End        ContactName      Agente      Code
0   2020-05-05 11:52:34    2020-05-05 18:03:15      473000 Carlos   Pedro BRA    473000
1   2020-05-05 15:39:06    2020-05-05 18:03:09    580000 Rosineia   Pedro BRA    580000
2   2020-05-05 17:47:59    2020-05-05 18:03:06   2038000 Mauricio   Pedro BRA   2038000
3   2020-05-05 17:43:46    2020-05-05 18:02:58   3975000 - Sergio   Pedro BRA   3975000
4   2020-05-05 15:34:44    2020-05-05 17:52:17   3388000  Rodrigo   Pedro BRA   3388000
5   2020-05-05 15:34:43    2020-05-05 17:52:14            4077000   Pedro BRA   4077000
6   2020-05-05 17:45:24    2020-05-05 17:52:08  2064000 Cleberson   Pedro BRA   2064000
7   2020-05-05 18:20:24    2020-05-05 18:25:00  2064000 Cleberson   Pedro BRA   2064000

Я хочу удалить вызовы, которые произошли от одного и того же клиента к тому же агенту в течение одного часа, например:

  • Клеберсон (последняя строка) начал встречу с агентом Педро в 17:45 и закончил в 17:52

  • вскоре после этого (МЕНЕЕ ЧАСА ) он начал другую услугу, которая также была завершена менее чем за час

Я хотел бы сохранить только одну запись о посещаемости, если в течение часа происходит более одной

спасибо в помощь, перепробовал все способы но не смог

1 Ответ

1 голос
/ 06 мая 2020

Я думаю, что следующая стратегия должна решить вашу проблему:

  1. Сортируйте фрейм данных по столбцам: ContactName, Agente, Start. Теперь у вас должны быть все экземпляры одного и того же клиента, связывающиеся с одним и тем же агентом с возрастающим временем начала.
  2. Вы можете использовать оператор сдвига pandas, чтобы создать свое контактное имя, агенты и начальные столбцы, сдвинутые на один - эффективно создание новых столбцов, которые позволяют сравнивать каждую строку с предыдущей (пример использования - df ['ContactName']. shift (1)). Теперь вы можете использовать логическое маскирование для создания столбца, который зависит от этих новых столбцов, чтобы отметить строки, которые вы хотите идентифицировать.

Свободно на основе ваших данных в psuedocode-

df = df.sort_values(by=['ContactName', 'Angente', 'Start'])
mask = (df['ContactName'] == df['ContactName'].shift(1)) & (df['Agente'] == df['Agente'].shift(1)) & (abs(df['Start'] - df['Start'].shift(1)) < pd.Timedelta('1 hour')) # select rows that have the same contact, agent as the previous row as well as started with less than 1 hour difference
df.loc[mask, 'to_remove'] = True 
df = df[~df['to_remove'] # filter out redundant values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...