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

如何用Pandas基于同列堆叠分类的时间序列数据绘制堆叠柱状图

实现按日期分组、传感器名称堆叠的柱状图

你的原始DataFrame结构如下:

TrgID           SenName  SignalToNoise    date
0  20201001000732016                a      1.645613  2020-10-01
1  20201001000732016                b      2.601088  2020-10-01
2  20201001000732016                c      1.253404  2020-10-01
3  20201001000732017                a      6.062578  2020-10-01
4  20201001000732017                b      2.753620  2020-10-01
5  20201001000732017                c      3.671336  2020-10-01
6  20201001000732018                a      1.466516  2020-10-01
7  20201001000732018                b      1.232844  2020-10-01
8  20201001000732018                c      2.028571  2020-10-01
9  20210331234440962                a     11.182038  2020-10-02
10 20210331234440962                b     11.413975  2020-10-02
11 20210331234440962                c     14.690728  2020-10-02
12 20210331234440963                a      1.228948  2020-10-02
13 20210331234440963                b      1.105445  2020-10-02
14 20210331234440963                c      2.035442  2020-10-02
15 20210331234440964                a      2.453167  2020-10-02
16 20210331234440964                b      2.075166  2020-10-02
17 20210331234440964                c      1.140017  2020-10-02

当前代码直接绘制会生成每个行数据的独立柱子,原因是你的数据是长格式(单数值列),而pandas堆叠柱状图需要宽格式(每个类别对应一列)。解决步骤如下:

1. 数据重塑:汇总并转成宽格式

先按date和SenName分组,对SignalToNoise求和,再将SenName转为列:

# 方法1:groupby + unstack
df_grouped = df.groupby(['date', 'SenName'])['SignalToNoise'].sum().unstack()

# 方法2:pivot_table(功能更灵活)
df_grouped = df.pivot_table(index='date', columns='SenName', values='SignalToNoise', aggfunc='sum')

处理后的数据格式会变成:

SenName           a          b          c
date                                     
2020-10-01   9.174707   6.587552   6.953311
2020-10-02  14.864153  14.594586  17.866187

2. 绘制堆叠柱状图

调用plot.bar并设置stacked=True参数:

ax = df_grouped.plot.bar(stacked=True, figsize=(8, 6))
# 可选:添加标题和标签
ax.set_title('SignalToNoise by Date (Stacked by Sensor)')
ax.set_xlabel('Date')
ax.set_ylabel('Total SignalToNoise')

这样就能得到x轴为日期,y轴按传感器名称堆叠的柱状图,每个日期下的柱子由a/b/c三类传感器的数值堆叠而成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:17:51