基于条件计算DataFrame中首次任务完成与访问完成的时间差
Pandas 计算分组首次任务完成时间与访问完成时间的小时差
处理步骤
- 转换时间格式:先将
Task Completed和Access Completed列从字符串转为Pandas datetime类型,这是时间计算的前提。针对百万级数据,指定时间格式能大幅提升转换效率。 - 分组聚合:按
ID、Category、Site分组,提取每组中最早的Task Completed时间(即最小值),同时提取每组固定的Access Completed时间(取组内任意值即可,这里用first)。 - 计算时间差:用首次任务完成时间减去访问完成时间,将时间差转换为小时数,最后整理成目标格式。
代码实现
import pandas as pd # 假设你的DataFrame名为df,先处理时间列(指定格式加速转换) df['Task Completed'] = pd.to_datetime(df['Task Completed'], format='%m/%d/%y %I:%M:%S%p') df['Access Completed'] = pd.to_datetime(df['Access Completed'], format='%m/%d/%y %I:%M:%S %p') # 分组聚合计算 result = df.groupby(['ID', 'Category', 'Site']).agg( first_task=('Task Completed', 'min'), access_time=('Access Completed', 'first') ).reset_index() # 计算小时差 result['Time Difference'] = (result['first_task'] - result['access_time']).dt.total_seconds() / 3600 # 保留需要的列并转换为整数格式 result = result[['ID', 'Category', 'Site', 'Time Difference']].astype({'Time Difference': int}) print(result)
输出结果
运行代码后将得到与预期一致的结果:
| ID | Category | Site | Time Difference |
|---|---|---|---|
| 1 | A | X | 1 |
| 1 | A | Y | 24 |
| 1 | B | X | 1 |
| 2 | A | X | 1 |
性能优化提示
针对百万级行的DataFrame,上述方法效率优异:
- 指定
format参数的pd.to_datetime避免了Pandas自动推断格式的额外开销 groupby.agg是Pandas原生高效分组聚合操作,适配大数据量场景
内容的提问来源于stack exchange,提问作者CowboyCoder
相关产品推荐
相关产品推荐

