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

如何基于时间阈值为数据集添加车辆通行计数列

解决按车辆通行时间差重置计数的问题

要实现同一车辆两次通行时间差超过指定阈值时重置计数的功能,你需要在按车辆分组的基础上,额外根据时间差划分子分组,再在子分组内累加计数。以下是具体实现步骤:

步骤说明

  1. 确保时间列是datetime类型:方便后续计算时间差
  2. 计算相邻通行的时间差:按车辆分组,计算每辆车相邻两次通行的时间间隔
  3. 生成子分组标记:当时间差超过阈值时,标记为新的子分组,通过累加标记得到子分组ID
  4. 子分组内累加计数:按车辆+子分组ID分组,使用cumcount()实现分组内的计数

完整代码示例

import pandas as pd

# 示例数据集(替换为你的实际数据)
data = {
    'Vehicle': ['A', 'B', 'C', 'C', 'A', 'A', 'B', 'A'],
    'Time': ['00:15', '00:20', '00:25', '00:45', '00:59', '01:56', '22:55', '23:49']
}
df = pd.DataFrame(data)

# 转换时间列为datetime类型(如果你的数据包含日期,调整format参数即可)
df['Time'] = pd.to_datetime(df['Time'], format='%H:%M')

# 设置时间阈值(示例为20小时,可根据需求修改)
TIME_THRESHOLD = pd.Timedelta(hours=20)

# 计算每个车辆相邻通行的时间差
df['time_diff'] = df.groupby('Vehicle')['Time'].diff()

# 生成子分组ID:超过阈值则创建新分组
df['subgroup_id'] = df.groupby('Vehicle')['time_diff'].apply(
    lambda x: (x > TIME_THRESHOLD).cumsum()
)

# 计算每辆车在子分组内的通行次数
df['number times passed'] = df.groupby(['Vehicle', 'subgroup_id']).cumcount() + 1

# 保留需要的列(可选,删除中间辅助列)
df = df[['Vehicle', 'Time', 'number times passed']]
print(df)

代码解释

  • groupby('Vehicle')['Time'].diff():针对每个车辆,计算当前行与前一行的时间差,首次通行的时间差为NaN
  • (x > TIME_THRESHOLD).cumsum():对每个车辆的时间差判断,超过阈值时返回True(即1),累加后得到连续的子分组ID,同一连续时间段内的通行会被分到同一个子组
  • groupby(['Vehicle', 'subgroup_id']).cumcount() + 1:在每个车辆的子分组内从1开始计数,实现超过阈值重置的效果

运行后输出结果与你提供的示例完全一致:

Vehicle                Time  number times passed
0        A 1900-01-01 00:15:00                    1
1        B 1900-01-01 00:20:00                    1
2        C 1900-01-01 00:25:00                    1
3        C 1900-01-01 00:45:00                    2
4        A 1900-01-01 00:59:00                    2
5        A 1900-01-01 01:56:00                    3
6        B 1900-01-01 22:55:00                    1
7        A 1900-01-01 23:49:00                    1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:05:26