Запуск sql-запроса в фрейме данных pandas

#python #pandasql

#python #pandasql

Вопрос:

У меня есть dataframe df

ID Цена Регион
1 23 AUS
1 45 DXB
2 25 GER
2 18 TUN

Я хочу написать код на python, чтобы получить следующий результат

ID Цена Регион
1 45 DXB
2 25 TUN

Я пытался использовать pandasql для получения выходных данных, но он не дает желаемого результата

Код, который я пробовал, это

 import pandas as pd
import pandasql as ps

#to read table
df=pd.read_excel("test.xlsx")

ps.sqldf("select ID, max(Price), Region from df order by ID")
 

Если в самом python есть какой-либо другой код (без использования pandasql), который может получить вышеуказанный результат, пожалуйста, дайте мне знать

Ответ №1:

Вы можете использовать groupby.transform

 output_df = df[df['Price'].eq(df.groupby("ID")['Price'].transform("max"))]
 

Или с ps.sqldf помощью функции window для получения максимальной цены, а затем возврата строк, где цена равна максимальной цене:

 output_df  = ps.sqldf("""select ID,Price,Region from 
                        (select *, max(Price) over (partition by ID) max_Price from df)
                        where Price = max_Price""")
 

     ID  Price Region
0   1     45    DXB
1   2     25    GER
 

Ответ №2:

Вы можете сделать:

 df.sort_values('Price').drop_duplicates('ID', keep='last')