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

如何在绘图时筛选特定Event(Speeding)计算平均速度?

问题描述

我有如下CSV数据:

TimeEventSpeed
1/30/2022 17:23Speeding50
1/28/2022 18:22Speeding20
1/27/2022 22:00Speeding30
1/26/2022 23:23Speeding40
1/27/2022 22:00Stopping10
1/26/2022 23:23Stopping10

当前我的代码会计算所有Event的平均速度,并以24小时格式的时间为X轴、平均速度为Y轴绘图。但我只想从该CSV中获取Event为“Speeding”的平均速度,而非所有事件的平均速度。

我尝试了如下筛选代码:

event_filter = df["Event"] == "Speeding"
dr = df[event_filter]
grouped_by_event1 = dr.groupby('Event')[['Speed']]

当前绘制所有事件平均速度的代码:

import pandas as pd
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool

output_file('Speed.html')  # output for average speed graph

file = 'C:/Users/oof/Desktop/route.csv' 
df = pd.read_csv(file)  

df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M').dt.time
grouped_by_time = df.groupby('Time')[['Speed']].mean()
print(grouped_by_time)

source1 = ColumnDataSource(grouped_by_time)
p1 = figure(x_axis_type='datetime')
p1.line(x='Time', y='Speed', line_width=2, source=source1)
p1.title.text = 'Average Speed in a Day'
p1.yaxis.axis_label = 'Average Speed'
p1.xaxis.axis_label = '24-Hour'

p1.xaxis.major_label_overrides = {0: '0h', 24*60*60*1000: '24h'}
TOOLTIP1 = [("Time", "@Time{%H:%M}"),
            ("Average Speed", "@Speed")]
p1.add_tools(HoverTool(tooltips=TOOLTIP1, formatters={"@Time": "datetime"}, mode='vline'))

show(p1)
解决方案

只需在处理时间列之前,先筛选出Event为Speeding的行,后续再按时间分组计算平均速度即可。修改后的完整代码如下:

import pandas as pd
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool

output_file('Speed.html')  # 输出平均速度图表

file = 'C:/Users/oof/Desktop/route.csv' 
df = pd.read_csv(file)  

# 筛选出Event为Speeding的记录
df = df[df["Event"] == "Speeding"]

# 处理时间列并按时间分组计算平均速度
df['Time'] = pd.to_datetime(df['Time'], format='%m/%d/%Y %H:%M').dt.time
grouped_by_time = df.groupby('Time')[['Speed']].mean()
print(grouped_by_time)

source1 = ColumnDataSource(grouped_by_time)
p1 = figure(x_axis_type='datetime')
p1.line(x='Time', y='Speed', line_width=2, source=source1)
p1.title.text = '超速事件的日均平均速度'
p1.yaxis.axis_label = '平均速度'
p1.xaxis.axis_label = '24小时制时间'

p1.xaxis.major_label_overrides = {0: '0h', 24*60*60*1000: '24h'}
TOOLTIP1 = [("时间", "@Time{%H:%M}"),
            ("平均速度", "@Speed")]
p1.add_tools(HoverTool(tooltips=TOOLTIP1, formatters={"@Time": "datetime"}, mode='vline'))

show(p1)

关键修改说明

  • 提前添加筛选逻辑df = df[df["Event"] == "Speeding"],直接过滤掉非超速记录,后续所有计算仅基于超速事件。
  • 同步修改了图表的标题、轴标签和提示文本为中文(若不需要可自行改回英文)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:40:35