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