У меня есть фрейм данных, как показано ниже
df = pd.DataFrame({'subjectID' :[1,1,1,1,1,1,2,2,2],'start_date':
['10/30/2006 08:04','10/30/2006 08:04','11/30/2006 11:01','12/30/2006 02:04','02/13/2007 07:24','04/20/2007 08:34',
'02/20/2007 06:44','01/20/2007 03:44','11/09/2006 02:03']})
Что я хотел бы сделать, это
1) отсортировать фрейм данных по двум столбцам (subject_id и start_date для каждого предмета). Значение для каждого предмета, дата начала должна быть организована в порядке возрастания. Подобно group by subject_id и отсортируйте значения start_date
2) Заполните столбец end_date для каждого пациента, выбрав следующее уникальное значение start_date для того же пациента.
3) Следуя шагу 2, мы столкнемся с тем, что последняя запись каждого субъекта не будет иметь других значений, выходящих за пределы, поэтому мы просто добавляем 10 дней, чтобы получить дату окончания последней записи для каждого субъекта
Это то, что я пытался
df = df.sort_values(['subjectID', 'start_date'], ascending=[True,True]) # works but is this same as group by and sort after?
df['end_date'] = df.groupby('subjectID')['start_date'].unique().shift(-1) # this doesn't work
Я ожидаю, что мой вывод будет таким, как показано ниже