записи дедупликации(панды оконных функций)

#python #sql #pandas #database #dataframe

Вопрос:

Привет, я хочу вывести свои записи, упорядоченные по дате отмены, поэтому меня будет интересовать только самая последняя запись.

примеры данных

ID cancel_date тип_оф_фрукта
1 2021-03-02 Apple
1 2021-01-01 Apple
2 2021-02-01 Оранжевый

ожидаемый результат

ID cancel_date тип_оф_фрукта
1 2021-03-02 Apple
2 2021-02-01 Оранжевый

Я написал SQL-код, но я должен реализовать эту логику в панд, пожалуйста, помогите

 SELECT   *  FROM   (SELECT *,   rank() over(partition by id order by cancel_date desc) as rank   FROM df   ORDER BY id, cancel_date DESC) a  where rank = 1  

Ответ №1:

Вот как вы можете этого достичь.

Приведенный ниже код преобразует cancel_date столбец в datetime объект, потому что вы хотите заказать его с помощью cancel_date :

 #--if cancel_date is a string, then this code will convert to datetime--  import pandas as pd df['cancel_date']= pd.to_datetime(df['cancel_date'])  

Затем сгруппируйте таблицу id (это похоже на раздел в SQL ), затем используйте cancel_date столбец, который нужно отсортировать по descending порядку. Приведенный ниже код позволит достичь того же:

 df["Rank"] = df.groupby("id")["cancel_date"].rank(method="first", ascending= False)  

Наконец, фильтрация данных с рангом 1:

 filtered_df = df[df["Rank"] == 1] filtered_df.head()