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

基于时间戳跨行汇总数据:合并拆分行程段技术问询

行程分段合并解决方案

我来帮你搞定这个行程合并的问题,用Python的pandas就能高效处理这类数据清洗场景,下面是具体的步骤和代码示例:

1. 先给数据排好序

首先得确保数据按user_id、purpose和start_timeh排序,这样同一行程的分段才会挨在一起,方便后续处理:

import pandas as pd

# 读取你的数据文件,替换成实际路径
df = pd.read_csv('your_trip_data.csv')

# 按用户ID、行程目的、开始时间排序,重置索引避免混乱
df = df.sort_values(by=['user_id', 'purpose', 'start_timeh']).reset_index(drop=True)

2. 给同一行程的分段打标签

接下来要给属于同一完整行程的分段打上相同的分组ID。判断规则就是你说的三个条件:用户ID相同、行程目的相同、当前段的开始时间等于上一段的结束时间。我们用shift()函数对比当前行和上一行的值,生成分组标识:

# 生成分组ID:只要任意一个条件不满足,就开启新的分组
df['group_id'] = (
    (df['user_id'] != df['user_id'].shift()) |
    (df['purpose'] != df['purpose'].shift()) |
    (df['start_timeh'] != df['end_timeh'].shift())
).cumsum()

这里的逻辑很直观:如果当前行和上一行不满足三个条件中的任意一个,就把分组ID加1,这样同一行程的所有分段都会被分到同一个group_id下。

3. 合并同一分组的行程段

最后按group_id分组,聚合出完整的行程记录:取用户ID和目的的唯一值,开始时间取分组里最早的,结束时间取最晚的:

# 分组聚合得到合并后的行程
merged_trips = df.groupby('group_id').agg(
    user_id=('user_id', 'first'),
    purpose=('purpose', 'first'),
    start_timeh=('start_timeh', 'min'),
    end_timeh=('end_timeh', 'max')
).reset_index(drop=True)

4. 验证合并结果

你可以随便挑几个用户的记录看看合并效果,比如:

# 查看用户ID为3的合并后行程
print(merged_trips[merged_trips['user_id'] == 3])

如果你的时间字段是datetime类型,处理逻辑完全一样,只要确保排序和对比时类型正确就没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:24:29