You need to enable JavaScript to run this app. 如何使用Python构建统计车辆通行数量的起讫点(OD)矩阵
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python构建统计车辆通行数量的起讫点(OD)矩阵

基于过站数据构建OD矩阵实现方法

原有代码问题说明

原有代码直接将全量传感器列按行拆分两两组合,既未区分不同车辆的过站记录,也没有按照时间顺序匹配同一辆车的先后过站顺序,统计逻辑完全不符合OD矩阵的定义要求。

正确实现逻辑

OD矩阵统计的是同一辆车从起点O到终点D的通行次数,需要遵循以下逻辑实现:

  • 转换时间字段为可排序的datetime格式,按车辆编号分组后,组内按时间升序排列,得到每辆车的过站顺序
  • 对每辆车的过站传感器序列,将相邻两个站点组合为OD对,前一个为O、后一个为D
  • 统计所有OD对的出现次数,转换为行列对应所有站点的矩阵格式

完整实现代码

import pandas as pd

# 1. 预处理:转换时间格式,按车辆+时间排序保证过站顺序正确
df['time'] = pd.to_datetime(df['time'])
df = df.sort_values(by=['vehicles', 'time']).reset_index(drop=True)

# 2. 按车辆分组生成所有有效OD对
od_pairs = []
for vehicle, group in df.groupby('vehicles'):
    sensor_list = group['sensors'].tolist()
    # 只有1条过站记录的车辆无法形成OD对,直接跳过
    if len(sensor_list) < 2:
        continue
    # 遍历生成相邻站点的OD对
    for i in range(len(sensor_list)-1):
        o = sensor_list[i]
        d = sensor_list[i+1]
        od_pairs.append((o, d))

# 3. 统计次数生成OD矩阵
od_df = pd.DataFrame(od_pairs, columns=['O', 'D'])
all_places = sorted(df['sensors'].unique())
od_matrix = pd.pivot_table(
    od_df,
    index='O',
    columns='D',
    aggfunc='size'
).reindex(index=all_places, columns=all_places, fill_value=0)

print(od_matrix)

样例数据输出结果

对问题中给出的样本数据运行上述代码,输出结果如下:

D   s1  s2  s3  s4
O
s1   0   1   1   0
s2   0   0   0   1
s3   0   1   0   0
s4   0   0   0   0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:12:00