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

使用pandas识别短间隔拆分行程 实现用户出行次数精确统计

实现思路

核心逻辑是按用户维度对行程排序后,通过相邻行程的时间间隔切分独立出行,给每段独立出行分配唯一标识,后续所有统计基于唯一标识去重即可,从根源避免拆分行程重复计数。

具体实现步骤
  • 先将时间字段转换为pandas原生datetime类型,为时间差计算做准备
  • 按用户ID、行程开始时间升序排序,修正原始数据可能存在的行程顺序错乱问题
  • 按用户分组,计算当前行程的开始时间与同用户上一段行程结束时间的间隔
  • 标记独立出行起点:用户的第一条行程、与上一段行程间隔≥20分钟的行程,均记为新的独立出行起点
  • 为每段独立出行生成全局唯一ID,作为后续统计的去重依据
import pandas as pd

# 构造/读取数据集
df = pd.DataFrame({
    'user': [62,62,62,62,62,62,62,62,62],
    'start': ['2008-06-20 04:21:40','2008-06-20 05:40:31','2008-06-21 04:23:39',
              '2008-06-21 04:47:53','2008-07-13 05:45:27','2008-07-13 06:47:57',
              '2008-07-14 09:08:06','2008-07-14 13:12:46','2008-07-14 13:24:23'],
    'end': ['2008-06-20 05:33:46','2008-06-20 05:53:11','2008-06-21 04:35:15',
            '2008-06-21 05:43:20','2008-07-13 06:02:54','2008-07-13 07:20:19',
            '2008-07-14 09:17:15','2008-07-14 13:20:10','2008-07-14 13:30:43'],
    'mode': ['bus','walk','bus','bus','bus','bus','taxi','bus','bus']
})

# 转换时间字段类型
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])

# 按用户、行程开始时间排序
df = df.sort_values(by=['user', 'start']).reset_index(drop=True)

# 计算同用户相邻两段行程的时间间隔
df['time_gap'] = df['start'] - df.groupby('user')['end'].shift(1)

# 标记独立出行起点
df['is_new_trip'] = (df['time_gap'].isna()) | (df['time_gap'] >= pd.Timedelta(minutes=20))

# 生成独立出行ID
df['trip_id'] = df.groupby('user')['is_new_trip'].cumsum()
df['global_trip_id'] = df['user'].astype(str) + '_' + df['trip_id'].astype(str)
结果验证

代码运行后,示例数据中用户62的9条记录会被标记为6个独立出行ID,和预期结果一致。处理后新增字段含义如下:

  • time_gap:与上一段同用户行程的时间间隔
  • is_new_trip:是否为独立出行的起点
  • trip_id:用户维度下的独立出行编号
  • global_trip_id:全局唯一的独立出行ID
常用统计操作
  • 统计全量独立出行总次数:df['global_trip_id'].nunique()
  • 按用户统计各自的出行次数:df.groupby('user')['global_trip_id'].nunique()
  • 统计指定时段内的出行次数:先筛选出时段覆盖的行程记录,再对global_trip_id去重计数即可,注意不要直接统计筛选后的行数,避免跨时段的同一次出行被重复计数
  • 提取单次独立出行的汇总特征:按global_trip_id分组聚合,比如取组内最小start作为出行开始时间、最大end作为出行结束时间、收集所有mode值作为本次出行的换乘交通方式列表

排序步骤不可省略,若原始数据中同用户的行程未按时间顺序排列,直接计算相邻时间差会得到完全错误的切分结果。该方法对海量数据友好,pandas可高效支持百万级行程记录的切分计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:03:20