Python - 如何创建值出现的运行列表并计算第一个和最后一个之间的时间差?

标签 python python-3.x pandas

我有包含 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 第一次出现和最后一次出现之间的时间。

所以输出看起来像这样: enter image description here

有没有办法在 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/

相关文章:

python - 使用 sklearn 获取单词的 tf-idf 权重

python - 如何使用Python通过knox与Hbase交互?

python - 是否可以在jupyter笔记本中将 `print`输出显示为LaTeX?

python - 绘制系列饼图

python - 在 pandas 数据框中定义不同类型的列

python - Pyramid 中的身份验证问题(记住+authentiated_userid)

python - 仅接受单行的 PyGTK TextView

python - Django 1.10 不显示来自数据库的帖子

python - 整个程序内的延迟打印

python - 收藏速度更快,类似pandas系列的计数器操作