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

Pandas如何同时按标签分组与时间粒度聚合均值后绘制折线图

按label分折线+时间粒度聚合绘图实现

需要实现的多折线效果参考:
按label区分的多折线图示例

图表基础规则:

  • x轴:datetime时间戳
  • y轴:count计数值
  • 不同折线对应label字段的不同取值
  • 大数据量场景下先按1小时/1天粒度聚合计算count均值

核心问题原因

之前的两段代码分别只实现了单一维度的分组逻辑:

  • 仅按label分组绘图:没有做时间维度的重采样聚合
  • 仅按时间粒度聚合求均值:没有拆分label维度,所有label的数据会被混在一起计算
    只需要把两个分组规则同时传入groupby即可实现需求。

完整实现步骤

  1. 数据预处理
    读入的csv中datetime是unix时间戳格式,需要先转为pandas可识别的时间类型,再设为数据索引:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 读取csv数据
    df = pd.read_csv("your_data_path.csv")
    # 把秒级unix时间戳转为datetime类型
    df["datetime"] = pd.to_datetime(df["datetime"], unit="s")
    # 将时间列设为索引
    df = df.set_index("datetime")
    
  2. 双维度分组聚合
    分组时同时传入时间粒度规则和label字段作为分组键,计算每个时间窗口下每个label对应的count均值,再把label维度转为列方便绘图:

    # freq参数控制聚合粒度:'1H'为1小时,'1D'为1天,'2min'为2分钟,按需调整即可
    df_agg = df.groupby(
        [pd.Grouper(freq='1H'), "label"]
    )["count"].mean().unstack()
    

    末尾的unstack()操作会把多层行索引中的label层级转换为列索引,最终输出的表结构为:行是聚合后的时间点,每一列对应一个label的均值结果,刚好适配pandas多折线图的输入要求。

  3. 生成折线图
    直接对聚合后的结果调用plot方法,会自动为每个label列生成独立折线:

    df_agg.plot(
        ylabel="count",
        xlabel="datetime",
        figsize=(10,6) # 可按需调整画布大小
    )
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:51:27