簡體   English   中英

如何從頭開始創建一個表,讓我使用 python 獲取每個用戶的最后訂單?

[英]How can I create from scratch a table that allows me to get the last order of each user using python?

示例數據我正在做一個練習,從一個發明的原始表中獲取每個用戶的最后一次購買,該表包含用戶 ID 的名稱、購買日期、購買項目的 ID、InvoiceID 和其他功能。 我需要在 Python 中創建這個新表,但到目前為止我還沒有找到方法。

我期望得到一張表格,每個用戶只有一張發票(每張發票中有幾項),每張發票都是他們每個人注冊的最后一張。 示例數據可在: link_github下載

我使用此代碼獲取每個用戶的最后訂單:

import pandas as pd
df = pd.DataFrame({'user': [1, 2, 3, 1, 1, 2, 2],
                   'product':['A','B','C', 'A','C','D','A'], 
                   'invoice': [101, 102, 103, 104, 104, 105, 105],
                   'date': ['1/02/2023', '1/03/2023', 
                   '1/04/2023','1/05/2023',
                   '1/05/2023','1/06/2023','1/06/2023']})

df['lastorder'] = df.groupby(['user'])['date'].\
                                            apply(lambda x: x.shift())

應用它后,我嘗試通過過濾器創建一個新表,但我無法將每個用戶在上次購買日期與 InvoiceID 對齊的最后訂購的商品組合起來。

我希望得到一個表,其中僅包含用戶 1、2 和 3 與發票 103 相關聯的最后一次購買(日期分別為 1/05/2023、1/06/2023 和 1/04/2023) , 104 和 105 在上面給出的例子中。

嘗試:

df_dates = df.sort_values(['date']).groupby(['UserID']).tail(1)
df_dates = df_dates[['UserID', 'date']]
df_lastorder = df.merge(df_dates, how='inner', on=['UserID', 'date']).sort_values(['UserID'])

第一行僅采用每個分組的 UserID 的最后一行(尾部)。 首先排序意味着最后一行是最新的。

第二行只包含 UserID 和日期列,因為這就是我們所需要的。 它返回每個客戶的列表以及每個客戶的最后訂單日期。

最后一行是魔術發生的地方。 合並 function 使用內部聯接(如果您熟悉 sql,就像在數據庫中一樣)。 這基本上意味着在 UserID 和日期上建立了鏈接。 返回 df 中用戶 ID 和日期與 df_dates 中匹配的所有行的列表。 在語句末尾按 UesrID 排序並非絕對必要,但可以更輕松地讀取 UserID 順序聚集在一起的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM