运行 sql 查询 pandas 数据框
Run sql query on pandas dataframe
我有一个数据框 df
ID
Price
Region
1
23
AUS
1
45
DXB
2
25
GER
2
18
TUN
我想在python中写一段代码得到如下输出
ID
Price
Region
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)可以得到上面的输出,请告诉我
你可以这样做:
df.sort_values('Price').drop_duplicates('ID', keep='last')
您可以使用groupby.transform
output_df = df[df['Price'].eq(df.groupby("ID")['Price'].transform("max"))]
或使用 ps.sqldf
使用 window 函数获取最高价格,然后 return 价格等于最高价格的行:
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
我有一个数据框 df
ID | Price | Region |
---|---|---|
1 | 23 | AUS |
1 | 45 | DXB |
2 | 25 | GER |
2 | 18 | TUN |
我想在python中写一段代码得到如下输出
ID | Price | Region |
---|---|---|
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)可以得到上面的输出,请告诉我
你可以这样做:
df.sort_values('Price').drop_duplicates('ID', keep='last')
您可以使用groupby.transform
output_df = df[df['Price'].eq(df.groupby("ID")['Price'].transform("max"))]
或使用 ps.sqldf
使用 window 函数获取最高价格,然后 return 价格等于最高价格的行:
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