Если необходимо добавить новые строки для каждой группы, если есть изменения, используйте:
df1 = (df[df['ID'].ne(df['ID'].shift(-1).ffill())]
.assign(Event='today',
Date = pd.Timestamp.today().floor('d')))
print (df1)
ID Event Date
3 1 today 2020-04-24
Или:
df1 = (df.drop_duplicates('ID', keep='last')
.iloc[:-1]
.assign(Event='today',
Date = pd.Timestamp.today().floor('d')))
print (df1)
ID Event Date
3 1 today 2020-04-24
И затем добавьте к оригиналу с значения индекса сортировки:
df = df.append(df1).sort_index(kind='mergesort')
print (df)
ID Event Date
0 1 A 2019-11-12
1 1 B 2019-11-13
2 1 C 2019-11-18
3 1 D 2019-11-20
3 1 today 2020-04-24
4 2 A 2019-11-20
5 2 B 2019-11-20