pandas 如何使用Python分配时间顺序位置或每个客户的购买历史

i5desfxk  于 2023-06-20  发布在  Python
关注(0)|答案(1)|浏览(144)

我有一个数据集的所有客户购买了在过去5年与下面的列作为一个例子。
客户ID|订单号|订购日期(日期时间)|项目ID
我需要做的是分配每个单独的客户订单位置(即1,2,3,4)-因此,对于每个客户,我能够知道哪个订单是他们的第一,第二或第三使用上述标准
需要考虑的事项:
1.同一表中有多个客户ID和订单号
1.有多个行从同一个客户和订单号组合,因为每个订单有多个项目,所以如果第一个订单的客户有3个项目上,我希望所有3个项目显示为1。
努力寻找一个如何做到这一点的起点
以下是数据表:

import pandas as pd
df = pd.DataFrame({'Customer ID' : ['C100003','C100002','C100002','C100002','C100003','C100002'],
                    'Order Number' : ['RJSJ0053','RJSJ0060','RJSJ0085','RJSJ0085','RJSJ0089','RJSJ0092'],
                    'Order Date' : ['2023-05-08','2023-06-09','2023-06-13','2023-06-13','2023-06-13','2023-06-14'],
                    'Item ID' : ['Mouse','Keyboard','Computer','Monitor','Keyboard','Headset'],
                    'Order Position' : [1,1,2,2,2,3]})
vmjh9lq9

vmjh9lq91#

首先,删除所有重复的[Customer ID, Order Number]。这将得到一个看起来像这样的表:

Customer ID Order Number  Order Date   Item ID
0     C100003     RJSJ0053  2023-05-08     Mouse
1     C100002     RJSJ0060  2023-06-09  Keyboard
2     C100002     RJSJ0085  2023-06-13  Computer
4     C100003     RJSJ0089  2023-06-13  Keyboard
5     C100002     RJSJ0092  2023-06-14   Headset

现在我们可以按[Customer ID, Order Date]排序,创建一个按Customer ID分组的累积计数,然后向前填充缺失的值,因为这些是相同顺序的多个项目。

df['Order Position'] = (df.drop_duplicates(['Customer ID', 'Order Number'])
                          .sort_values(['Customer ID', 'Order Date'])
                          .groupby('Customer ID')
                          .cumcount()+1
                       )

df['Order Position'] = (df.sort_values(['Customer ID', 'Order Date'])['Order Position']
                          .fillna(method='ffill')
                          .astype(int)
                       )
Customer ID Order Number  Order Date   Item ID  Order Position
0     C100003     RJSJ0053  2023-05-08     Mouse               1
1     C100002     RJSJ0060  2023-06-09  Keyboard               1
2     C100002     RJSJ0085  2023-06-13  Computer               2
3     C100002     RJSJ0085  2023-06-13   Monitor               2
4     C100003     RJSJ0089  2023-06-13  Keyboard               2
5     C100002     RJSJ0092  2023-06-14   Headset               3

相关问题