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

基于两列均值绘图及Pandas时间差处理技术咨询

消防救护车数据集分组计算与可视化解决方案

一、数据预处理与Time_Diff优化

  • 先将IA和TOC列转为datetime类型,计算出Time_Diff(timedelta类型)
  • 把Time_Diff转为总分钟数(方便后续求平均计算),后续再格式化回HH:MM格式去掉"0 days"
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据集(替换为你的本地文件路径)
df = pd.read_csv("fire_ambulance_data.csv")

# 转换时间列
df['IA'] = pd.to_datetime(df['IA'], format='%d/%m/%Y %H:%M:%S')
df['TOC'] = pd.to_datetime(df['TOC'], format='%d/%m/%Y %H:%M:%S')

# 计算时间差
df['Time_Diff'] = df['TOC'] - df['IA']

# 将timedelta转为总分钟数(用于平均值计算)
df['Time_Diff_Mins'] = df['Time_Diff'].dt.total_seconds() / 60

二、按Station分组计算平均响应时间

按Station分组对分钟数求平均,再将结果格式化为HH:MM的干净格式:

# 分组计算平均响应分钟数
station_avg = df.groupby('Station')['Time_Diff_Mins'].mean().reset_index()

# 将平均分钟数转为HH:MM格式
def mins_to_hhmm(mins):
    hours = int(mins // 60)
    minutes = int(mins % 60)
    return f"{hours:02d}:{minutes:02d}"

station_avg['Avg_Time'] = station_avg['Time_Diff_Mins'].apply(mins_to_hhmm)

# 输出最终结果
print(station_avg[['Station', 'Avg_Time']])

三、绘制平均响应时间图表

用柱状图展示各站点的平均响应时间,避免之前只显示计数的问题:

# 设置图表尺寸
plt.figure(figsize=(12, 8))
bars = plt.bar(station_avg['Station'], station_avg['Time_Diff_Mins'])

# 在每个柱子上方标注HH:MM格式的时间
for bar, time in zip(bars, station_avg['Avg_Time']):
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             time, ha='center', va='bottom')

plt.title('各消防站平均响应时间')
plt.xlabel('消防站')
plt.ylabel('平均响应时间(分钟)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

关键说明

  • 转成分钟数计算的原因:timedelta类型直接求平均会自带"0 days",转为数值计算更灵活,再格式化就能得到干净的时间展示
  • 绘图用数值作为y轴、标注显示格式化时间,既保证图表数据准确,又满足你要的展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:10:42