Python的Group-By技术与SQL-partition-By技术的比较
我想问一个概念性的问题 我有一张看起来像的桌子Python的Group-By技术与SQL-partition-By技术的比较,python,sql,pandas,dataframe,Python,Sql,Pandas,Dataframe,我想问一个概念性的问题 我有一张看起来像的桌子 UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT 1001 100.25 2 2021-05-06 1 PB 1001 2122.75 10 2021-05-01 1 PB 1002 212.75 5
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1001 2122.75 10 2021-05-01 1 PB
1002 212.75 5 2021-05-07 2 PT
1002 3100.75 10 2021-05-01 2 PB
我希望对于每个UPC_代码和公司代码,都应该获取最新的数据
为了实现这一点,我使用了SQL和Python
使用SQL:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY UPC_CODE, COMPANY_CODE ORDER BY DATE DESC) rn
FROM yourTable)
SELECT UPC_CODE, A_PRICE, A_QTY, DATE, COMPANY_CODE, A_CAT
FROM cte
WHERE rn = 1;
使用Python:
df = df.groupby(['UPC_CODE','COMPANY_CODE']).\
agg(Date = ('DATE','max'),A_PRICE = ('A_PRICE','first'),\
A_QTY = ('A_QTY','first'),A_CAT = ('A_CAT','first').reset_index()
理想情况下,我应该得到以下结果表:
UPC_CODE A_PRICE A_QTY DATE COMPANY_CODE A_CAT
1001 100.25 2 2021-05-06 1 PB
1002 212.75 5 2021-05-07 2 PT
然而,使用SQL我得到了上述信息,但Python不是这样
我在这里遗漏了什么?
upc\u code
和date
列可能与rank(method='first',升序=False)
一起使用,例如,在确定第一行时按降序应用dataframe.groupby()
函数在将date
列转换为datetime后,在Python中键入,以便筛选出df['rn']1对应的行
df['date']=pd.to_datetime(df['date'])
df['rn']=df.groupby('upc_code')['date'].rank(method='first',升序=False)
打印(df[df['rn']==1])
@Vahram Daniyen:请详细说明。