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

Pandas合并同用户间隔<30分钟行程段后按月统计出行次数

Pandas 拆分行程合并与月度出行量统计方案

前置要求

确保你的DataFrame包含三个核心字段:

  • user_id:用户唯一标识
  • start_time:单段行程开始时间
  • end_time:单段行程结束时间
    如果时间字段不是datetime格式,先执行类型转换。

完整实现代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# --------------------------
# 1. 数据预处理
# --------------------------
# 转换时间字段为标准datetime格式
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])

# 按用户ID、行程开始时间排序,保证同用户的行程按时间先后排列
df = df.sort_values(by=['user_id', 'start_time']).reset_index(drop=True)

# --------------------------
# 2. 按规则合并同次出行
# --------------------------
# 计算同用户相邻两段行程的时间间隔(单位:分钟)
df['last_segment_end'] = df.groupby('user_id')['end_time'].shift(1)
df['interval_min'] = (df['start_time'] - df['last_segment_end']).dt.total_seconds() / 60

# 标记新出行起点:同用户第一条行程、与上一段间隔>=30分钟的行程为新出行
df['is_new_trip'] = (df['interval_min'].isna()) | (df['interval_min'] >= 30)
# 累计求和生成出行ID,同一次出行的多段记录共享同一个ID
df['trip_id'] = df.groupby('user_id')['is_new_trip'].cumsum()

# --------------------------
# 3. 聚合得到月度出行量
# --------------------------
# 按出行ID去重,得到所有单次出行的记录
trips_unique = df.groupby(['user_id', 'trip_id'], as_index=False).agg(
    trip_start_time = ('start_time', 'min')
)
# 提取出行所属月份,统计每月出行总量
trips_unique['month'] = trips_unique['trip_start_time'].dt.to_period('M')
monthly_stats = trips_unique.groupby('month', as_index=False).agg(
    total_trips = ('trip_id', 'count')
)

# --------------------------
# 4. 绘制月度出行量折线图
# --------------------------
# 转换月份格式适配绘图
monthly_stats['month'] = monthly_stats['month'].dt.to_timestamp()

plt.figure(figsize=(12, 6))
sns.lineplot(data=monthly_stats, x='month', y='total_trips', marker='o', linewidth=2)
plt.title('月度出行量趋势', fontsize=14)
plt.xlabel('月份', fontsize=12)
plt.ylabel('出行次数', fontsize=12)
plt.xticks(rotation=45)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

逻辑校验

该实现完全匹配给定的判定规则,示例数据统计结果如下:

  • 用户154(2007-05):3段原始行程合并为2次出行,计数正确
  • 用户62(2008-06):2段行程间隔6分钟,合并为1次出行,计数正确
  • 用户73(2008-05):4段行程间隔均超过30分钟,计为4次出行,计数正确

注意事项

跨零点、跨月份的连续行程会自动按第一次行程的开始时间归属月份,不会出现跨月拆分统计的错误。如果需要调整合并阈值,直接修改interval_min >= 30中的30为对应分钟数即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:09:30