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

如何用Pandas高效统计红绿灯时段车辆检测占比?

基于Pandas的红绿灯时段车辆检测数据高效统计方案

核心思路

通过状态填充+分组统计的矢量化操作替代逐行循环,利用Pandas内置方法高效完成状态标记与统计:

  • 先标记所有红绿灯切换事件的状态
  • 用向前填充(ffill())为后续所有事件继承最近的红绿灯状态
  • 筛选车辆检测事件后按状态分组统计

具体实现步骤

假设你的CSV数据包含Event Code列(事件编码),且数据已按时间顺序排列(若未排序,需先按时间列排序):

  1. 读取并预处理数据

    import pandas as pd
    
    # 读取CSV文件
    df = pd.read_csv("your_data.csv")
    # 若数据未按时间排序,执行以下代码(假设时间列名为'timestamp')
    # df = df.sort_values('timestamp')
    
  2. 标记并填充红绿灯状态
    创建light_state列标记切换事件,再通过向前填充让后续事件继承最近的红绿灯状态:

    # 初始化状态列
    df['light_state'] = None
    # 标记绿灯启动事件
    df.loc[df['Event Code'] == 1, 'light_state'] = 'green'
    # 标记红灯启动事件
    df.loc[df['Event Code'] == 10, 'light_state'] = 'red'
    # 向前填充状态,补全所有事件的红绿灯状态
    df['light_state'] = df['light_state'].ffill()
    
  3. 统计各时段车辆数量与占比
    筛选车辆检测事件后分组统计,再计算绿灯占比:

    # 筛选所有车辆检测事件
    vehicle_data = df[df['Event Code'] == 82]
    # 按红绿灯状态分组计数
    state_counts = vehicle_data['light_state'].value_counts().reset_index()
    state_counts.columns = ['light_state', 'vehicle_count']
    
    # 提取统计结果
    green_count = state_counts.loc[state_counts['light_state'] == 'green', 'vehicle_count'].values[0]
    red_count = state_counts.loc[state_counts['light_state'] == 'red', 'vehicle_count'].values[0]
    total_count = green_count + red_count
    green_percent = (green_count / total_count) * 100
    
  4. 输出结果

    print(f"绿灯时段检测车辆数:{green_count}")
    print(f"红灯时段检测车辆数:{red_count}")
    print(f"绿灯时段车辆占比:{green_percent:.1f}%")
    

方案优势

  • 基于Pandas矢量化操作,避免逐行循环的高时间复杂度,大数据量下性能提升显著
  • 逻辑清晰、代码简洁,后续扩展其他状态统计需求时易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:54:24