#python #pandas #pandas-groupby
Вопрос:
У меня есть следующий фрейм данных :
ID Date col3 col4
1 25/08/2021 Manual NA
1 27/08/2021 Automatic NA
1 27/08/2021 Manual NA <----- Insert another row after this row based on max date condition for ID 1
2 27/08/2021 Automatic NA
2 27/08/2021 Automatic NA <----- Insert another row after this row based on max date condition for ID 2
Для каждого идентификатора я хочу вставить строку после строки с максимальной датой. Вставленная строка должна содержать значения из строки с максимальной датой для первых 3 столбцов, но для col4 она должна иметь значения «ДОБАВЛЕНО». Таким образом, мой выходной df будет :
ID Date col3 col4
1 25/08/2021 Manual NA
1 27/08/2021 Automatic NA
1 27/08/2021 Manual NA
1 27/08/2021 Manual Added <-------- Inserted row
2 27/08/2021 Automatic NA
2 27/08/2021 Automatic NA
2 27/08/2021 Automatic Added <-------- Inserted row
В приведенном выше примере для идентификатора : 1 я вставил еще одну строку после строки номер 3, так как это строка с максимальной датой. Значения столбцов для этой вставленной строки такие же, как и для строки с максимальной датой. однако col4 изменен на «Добавлен».
Ответ №1:
Вы можете получить дополнительные строки, используя:
df.sort_values(by='Date').groupby('ID').last().assign(col4='Added')
nb. Если даты уже отсортированы, вы можете удалить этап сортировки
Затем вам просто нужно объединить их с исходными данными:
pd.concat([df,
df.sort_values(by='Date').groupby('ID').last().assign(col4='Added')
]).sort_values(by='ID')