You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多条件聚合Pandas DataFrame车辆行程数据的方法

合并重叠/间隔过近的车辆行程数据实现方案

核心思路

先按vehicleID和日期分组(限定单日行程处理),对每组内的行程按开始时间排序,通过计算相邻行程的时间间隔标记合并组,最后按车辆和合并组聚合汇总数据。

步骤1:数据预处理

确保时间列是datetime类型,并提取日期用于单日分组:

import pandas as pd

# 假设你的数据集包含以下列:vehicleID, start_time, end_time, duration, meters_travelled
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])
df['date'] = df['start_time'].dt.date

步骤2:标记合并组

对每个车辆-日期组,排序后计算相邻行程的时间间隔,标记需要合并的行程组:

def mark_merge_groups(group):
    # 按开始时间升序排序
    sorted_group = group.sort_values('start_time').reset_index(drop=True)
    # 计算当前行程与前一行程的间隔(转换为分钟)
    sorted_group['interval'] = sorted_group['start_time'].diff().dt.total_seconds() / 60
    # 生成合并组ID:间隔≥30分钟时新建组,否则归为上一组
    sorted_group['merge_group'] = (sorted_group['interval'] >= 30).cumsum() + 1
    # 处理第一个行程的空值(默认归为第1组)
    sorted_group['merge_group'].fillna(1, inplace=True)
    return sorted_group

# 应用到所有车辆-日期分组
processed_df = df.groupby(['vehicleID', 'date']).apply(mark_merge_groups).reset_index(drop=True)

步骤3:聚合合并后的行程

按车辆、日期和合并组汇总时长与行驶里程,同时保留合并行程的起止时间:

final_result = processed_df.groupby(['vehicleID', 'date', 'merge_group']).agg(
    merged_start=('start_time', 'min'),
    merged_end=('end_time', 'max'),
    total_duration=('duration', 'sum'),
    total_meters=('meters_travelled', 'sum')
).reset_index()

说明

  • 重叠或间隔不足30分钟的行程会被分配到同一个merge_group,聚合后形成单一行程记录
  • 间隔≥30分钟的行程会单独成组,保留独立的汇总结果
  • 最终结果包含合并后行程的最早开始时间、最晚结束时间,以及总时长、总行驶里程

内容的提问来源于stack exchange,提问作者Adorable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:11:07