【问题标题】:Comparison between Group By technique of Python and SQL partition byPython的Group By技术与SQL partition by的比较
【发布时间】:2021-05-14 09:15:49
【问题描述】:

我想问一个概念性问题。

我有一张看起来像的桌子

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_CODE 和 COMPANY_CODE 获取最新数据。

为了实现这一点,我有 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 并非如此。

我在这里错过了什么?

【问题讨论】:

  • @Vahram Daniyen:请详细说明。

标签: python sql pandas dataframe


【解决方案1】:

upc_codedate 列可能与rank(method='first',ascending = False) 一起使用,例如。在确定第一行时降序,在Python中将date列转换为datetime类型后应用dataframe.groupby()函数,以便过滤掉value = 1 代表df['rn']

df['date']=pd.to_datetime(df['date'])
df['rn']=df.groupby('upc_code')['date'].rank(method='first',ascending = False)
print(df[df['rn']==1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多