基于Pandas DataFrame计算重复客户两次订单的时间间隔(分钟)
解决Pandas计算客户两次订单时间差问题
问题说明
我有一个包含两列的Pandas DataFrame,列名为Order date(datetime格式)和Customer;每个重复的Customer仅存在两条已排序的记录。需要计算每个客户第二次订单的Order date与第一次的时间差(以分钟为单位),并生成仅包含Customer名称和时间差的新DataFrame。
原始示例数据
Order date Customer 4260 2022-11-11 16:29:00 (App admin) 8096 2022-10-22 12:54:00 (App admin) 996 2021-09-22 20:30:00 10013 946 2021-09-14 15:16:00 10013 3499 2022-04-20 12:17:00 100151 ... ... ... 2856 2022-03-21 13:49:00 99491 2788 2022-03-18 12:15:00 99523 2558 2022-03-08 12:07:00 99523 2580 2022-03-04 16:03:00 99762 2544 2022-03-02 15:40:00 99762
之前尝试通过索引删除数据,仅返回前两条记录,无法满足需求。
期望输出格式
| Customer | difference in minutes |
|---|---|
| 1232 | 445.0 |
| (App Admin) | 3432.0 |
| 1145 | 2455.0 |
| 6653 | 32.0 |
解决方案
代码实现
import pandas as pd # 确保Order date列是datetime类型(若未转换) df['Order date'] = pd.to_datetime(df['Order date']) # 按Customer分组,计算相邻订单的时间差并转换为分钟 time_diff = df.groupby('Customer')['Order date'].diff().dt.total_seconds() / 60 # 过滤空值,整理为目标DataFrame result_df = time_diff.dropna().reset_index() result_df.columns = ['Customer', 'difference in minutes']
逻辑说明
- 类型转换:先确保
Order date是datetime格式,否则无法计算时间差。 - 分组计算差值:
groupby('Customer')将数据按客户分组,diff()计算每组内当前行与前一行的时间差——由于每个客户只有两条记录,每组仅第二条记录会得到有效差值,第一条为NaN。 - 单位转换与整理:
dt.total_seconds() / 60将时间差从时间对象转为分钟数,dropna()去掉空值后,重置索引并修改列名得到目标格式。
内容的提问来源于stack exchange,提问作者DE clean
相关产品推荐
相关产品推荐

