У меня есть два кадра данных:
df = pd.DataFrame({'ID': ['1','1','1','2','2','3','4','4'], \
'ward': ['icu', 'surgery','icu', 'neurology','neurology','obstetrics','OPD', 'surgery'], \
'start_date': ['2016-10-22 18:19:19', '2016-10-24 10:20:00','2016-10-24 12:41:30', '2016-11-09 19:41:30','2016-11-09 23:20:00','2016-11-08 09:45:00','2016-10-15 09:15:00','2016-10-15 12:15:01'], \
'end_date': ['2016-10-24 10:10:19', '2016-10-24 12:40:30','2016-10-26 11:15:00', '2016-11-09 22:11:00','2016-11-11 13:30:00','2016-11-09 07:25:00','2016-10-15 12:15:00','2016-10-17 17:25:00'] })
df1 = pd.DataFrame({'ID': ['1','2','4'], \
'ward': ['radiology', 'rehabilitation','radiology'], \
'date': ['2016-10-23 10:50:00', '2016-11-24 10:20:00','2016-10-15 18:41:30']})
Я хочу заполнить данные, показанные в df1
, в df
путем сравнения идентификатора, и если date
в df1
находится где-то междуstart_date
и end_date
из df
.Если оба условия совпадают, я хотел бы добавить еще одну строку (данные взяты из df1
) в df
для этого конкретного идентификатора.Когда я добавляю новую строку, я также хотел бы изменить дату / время в предыдущей и следующей строке.
В качестве конечного результата мне нужно следующее:
ID ward start_date end_date
0 1 icu 2016-10-22 18:19:19 2016-10-23 10:50:00
1 1 radiology 2016-10-23 10:50:00 2016-10-23 10:50:00
2 1 icu 2016-10-23 10:50:00 2016-10-24 10:10:19
3 1 surgery 2016-10-24 10:20:00 2016-10-24 12:40:30
4 1 icu 2016-10-24 12:41:30 2016-10-26 11:15:00
5 2 neurology 2016-11-09 19:41:30 2016-11-09 22:11:00
6 2 neurology 2016-11-09 23:20:00 2016-11-11 13:30:00
7 3 obstetrics 2016-11-08 09:45:00 2016-11-09 07:25:00
8 4 OPD 2016-10-15 09:15:00 2016-10-15 12:15:00
9 4 hematology 2016-10-15 12:15:00 2016-10-15 18:41:30
10 4 radiology 2016-10-15 18:41:30 2016-10-15 18:41:30
11 4 hematology 2016-10-15 18:41:30 2016-10-17 17:25:00
В этом примере идентификаторы 1 и 4 соответствовали условию в обоих кадрах данных.Просто объясняя пример с идентификатором 1, первоначально идентификатор 1 был перемещен из icu -> хирургии -> icu, но после сравнения и заполнения новой строки окончательные данные показывают, что идентификатор 1 перемещается из icu -> рентгенология -> icu -> хирургия ->СИС.теперь ID 1 имеет пять строк вместо 3, и в каждой строке обновляются также start_date и end_date.
Набор данных (df) большой и включает 1 миллион строк, и я не знаю, какой метод мне следует использоватьчтобы получить правильный результат эффективно.Любая помощь будет оценена.