如何在Pandas中按event分组计算首末行的时间差
实现方案
1. 数据预处理与类型转换
首先需要将Date列转换为Pandas的datetime类型,才能进行时间运算:
import pandas as pd # 构造原始DataFrame data = { 'Date': ['2023-04-11 13:42:16', '2023-04-11 14:02:26', '2023-04-11 14:36:09', '2023-04-11 14:37:46', '2023-04-11 14:41:34', '2023-04-11 14:46:27', '2023-04-11 14:47:03'], 'event': ['play', 'play', 'play', 'start', 'start', 'start', 'start'] } df = pd.DataFrame(data) # 转换Date列为datetime类型 df['Date'] = pd.to_datetime(df['Date'])
2. 分组计算首尾时间差
按event字段分组,提取每组的日期、计算首尾时间差并格式化:
# 分组处理逻辑 result = df.groupby('event').apply(lambda x: pd.Series({ 'date': x['Date'].dt.date.iloc[0].strftime('%Y-%m-%d'), # 计算首尾时间差的总秒数 'diff_seconds': (x['Date'].iloc[-1] - x['Date'].iloc[0]).total_seconds() })).reset_index() # 将秒数转换为HH:MM:SS格式 result['diff'] = pd.to_datetime(result['diff_seconds'], unit='s').dt.strftime('%H:%M:%S') # 调整列顺序并删除临时列 result = result[['date', 'event', 'diff']]
3. 最终输出结果
运行代码后,result的输出与需求一致:
date event diff 0 2023-04-11 play 00:53:52 1 2023-04-11 start 00:09:17
内容的提问来源于stack exchange,提问作者rose1110
相关产品推荐
相关产品推荐

