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