我有包含 3 列的数据集。客户 ID、订单号和时间。 在此数据集中,您可以看到一些客户在不同时间下了多个订单。例如,ID4 的客户在下午 2:14 下了订单 4,然后在下午 6:17 下了订单 5。 我需要做的是确定第一个订单和最后一个订单之间的时间。
CustomerID Order# Time
0 1 1 2021-06-16 19:11:21
1 2 2 2021-06-17 19:24:19
2 3 3 2021-06-16 19:22:42
3 4 4 2021-06-14 14:16:50
4 4 5 2021-06-14 18:17:48
5 5 6 2021-06-16 21:11:06
6 6 7 2021-06-15 17:02:19
7 7 8 2021-06-13 21:01:36
8 8 9 2021-06-16 18:40:14
9 8 10 2021-06-14 14:46:59
10 8 11 2021-06-14 14:46:59
11 9 12 2021-06-17 09:10:15
12 10 13 2021-06-15 02:49:5
在 excel 中,我会将 CustomerID 从最低到最高排序,然后创建包含 ID 出现的运行列表的列,然后我会计算同一 ID 第一次出现和最后一次出现的时间差。
在 python 中我试过这个:
import pandas as pd
orders = pd.read_csv("data/Orders.csv")
occur = orders.groupby(['CustomerID']).size()
但问题是它正在对客户 ID 进行分组,我将失去时间维度。最后,我需要创建额外的 Colum,我将在其中计算同一 CustomerID 第一次出现和最后一次出现之间的时间。
有没有办法在 python 中做到这一点?
最佳答案
Groupby CustomerID
然后计算 Time
列的最小值和最大值的聚合
,然后取差,最后合并回来到原始数据框。
df['Time'] = pd.to_datetime(df['Time'])
minMax = df.groupby('CustomerID').agg(minTime=('Time', 'min'), maxTime=('Time', 'max'))
minMax['Diff'] = minMax['maxTime'] - minMax['minTime']
df = df.merge(minMax[['Diff']], on='CustomerID')
输出:
CustomerID Order# Time Diff
0 1 1 2021-06-16 19:11:21 0 days 00:00:00
1 2 2 2021-06-17 19:24:19 0 days 00:00:00
2 3 3 2021-06-16 19:22:42 0 days 00:00:00
3 4 4 2021-06-14 14:16:50 0 days 04:00:58
4 4 5 2021-06-14 18:17:48 0 days 04:00:58
5 5 6 2021-06-16 21:11:06 0 days 00:00:00
6 6 7 2021-06-15 17:02:19 0 days 00:00:00
7 7 8 2021-06-13 21:01:36 0 days 00:00:00
8 8 9 2021-06-16 18:40:14 2 days 03:53:15
9 8 10 2021-06-14 14:46:59 2 days 03:53:15
10 8 11 2021-06-14 14:46:59 2 days 03:53:15
11 9 12 2021-06-17 09:10:15 0 days 00:00:00
12 10 13 2021-06-15 02:49:05 0 days 00:00:00
关于Python - 如何创建值出现的运行列表并计算第一个和最后一个之间的时间差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68052044/