Добавьте еще одну строку в фрейм данных pandas на основе условия в столбце дата

#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')