Как найти следующую дату с тем же идентификатором, используя Python? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть таблица аудита набора сотрудников с такими столбцами, как Applicant_ID, Status , DateTime (отметка времени с датой и временем, когда кандидат получил этот статус) и Active_Status (Верно / Неверно).

Проблема в том, что у меня нет столбца с отметкой времени, когда статус был изменен.

Я пытаюсь сделать следующее:

Для каждой строки, где Active_Status имеет значение False, я хотел бы найти строки с одинаковым Applicant_ID и вернуть значение DateTime , которое является следующим в(больше, чем значение DateTime строки actve, но наименьшее из остальных) в новый столбец.

Мне придется делать это снова и снова с таблицами стой же структуры и содержат около 150 тыс. строк.

Пример набора данных:

Applicant_ID  Active_Status    Status    DateTime
 42830           True         Rejected   2018.08.06. 11:33:47 
 42830           False        Status1    2018.07.14. 6:46:04 
 42831           False        Status1    2018.07.14. 8:25:22 
 42831           True         Rejected   2018.08.06. 15:08:58 
 42832           False        Status1    2018.07.14. 9:03:37 
 42832           False        No         2018.07.16. 8:25:12 
 42832           True         Rejected   2018.08.31. 13:44:30

Что бы я хотел создать:

Applicant_ID  Active_Status    Status    DateTime                 Changed
 42830           True         Rejected   2018.08.06. 11:33:47     Active
 42830           False        Status1    2018.07.14. 6:46:04      2018.08.06. 11:33:47
 42831           False        Status1    2018.07.14. 8:25:22      2018.08.06. 15:08:58
 42831           True         Rejected   2018.08.06. 15:08:58     Active
 42832           False        Status1    2018.07.14. 9:03:37      2018.07.16. 8:25:12 
 42832           False        No         2018.07.16. 8:25:12      2018.08.31. 13:44:30 
 42832           True         Rejected   2018.08.31. 13:44:30     Active

1 Ответ

0 голосов
/ 05 октября 2018

Посмотрите на [Pandas shift fucntion] [1]

Сначала вы должны нормализовать столбец со строками, выглядящими как дата.

from dateutil.parser import parse
df['DateTime'] = df['DateTime'].apply(parse)

Сортировать значения и применить функцию сдвигадля каждой группы

df = df.sort_values(by=['Applicant_ID', 'DateTime'])
df['Changed'] = df.groupby('Applicant_ID').DateTime.shift(-1)

Результат:

Applicant_ID    Active_Status   Status  DateTime            Changed
1      42830    False      Status1      2018-07-14 06:46:04 2018-08-06 11:33:47
0      42830    True       Rejected     2018-08-06 11:33:47 NaT
2      42831    False      Status1      2018-07-14 08:25:22 2018-08-06 15:08:58
3      42831    True       Rejected     2018-08-06 15:08:58 NaT
4      42832    False      Status1      2018-07-14 09:03:37 2018-07-16 08:25:12
5      42832    False      No           2018-07-16 08:25:12 2018-08-31 13:44:30
6      42832    True       Rejected     2018-08-31 13:44:30 NaT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...