Вам нужно сначала отсортировать фрейм данных по идентификатору и дате (по убыванию). Затем вы делаете группу по идентификатору. Первый метод в группе по объектам вернет первую строку (с самой последней датой).
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'id':[1,2,2],
'metric':[0.5, 15.9, 4.7],
'date':[datetime(2019,5,10), datetime(2020,7,22), datetime(2017,11,3)]})
## sort df by id and date
df = df.sort_values(['id','date'], ascending= [True, False])
## return the first row of each group
df.groupby('id').first()