Убрать дубликаты заказов, оставив последнюю строку на order_id
В df одна строка на обновление заказа, столбцы order_id, status, updated_at. Некоторые order_id повторяются. Верните одну строку на order_id — самую свежую по updated_at.
import pandas as pd
def latest_orders(df: pd.DataFrame) -> pd.DataFrame:
# ваш код здесь
Напишите реализацию.
Сортируют по времени, затем убирают дубликаты, оставляя последнюю строку на ключ: df.sort_values('updated_at').drop_duplicates('order_id', keep='last'). Сортировка делает keep='last' синонимом «самой свежей»; без неё останется строка, оказавшаяся последней в файле, а не свежайшее обновление.
- ✗Звать drop_duplicates без сортировки, из-за чего keep='last' произволен
- ✗Сортировать по order_id вместо updated_at
- ✗По ошибке брать keep='first' после сортировки по убыванию
- →Как оставить последнюю строку через groupby и idxmax?
- →Что будет с ничьими, где две строки делят один updated_at?
Сортируют по updated_at, чтобы новейшая строка стояла последней на ключ, затем убирают дубликаты с keep='last'.
import pandas as pd
def latest_orders(df: pd.DataFrame) -> pd.DataFrame:
return (df.sort_values('updated_at')
.drop_duplicates('order_id', keep='last')
.reset_index(drop=True))
Сортировка — несущий шаг: keep='last' означает «новейшая» лишь когда строки во временном порядке. Эквивалент — df.loc[df.groupby('order_id')['updated_at'].idxmax()], он берёт строку с максимальным временем на группу без полной сортировки.