在python中基于多索引从groupby中生成堆积条形图

问题描述 投票:0回答:1

我想生成一个堆积条形图(最好在seaborn中),但很高兴使用本机pandas绘图功能。让我介绍一些测试数据来说明一切。

In [353]: import pandas as pd

In [354]: import seaborn as sns

In [355]: df = pd.DataFrame({"Cat":["A", "B","A","B","A","B","A","B","C"], "Time":[0,0,1,1,0,0,1,1,1], "ID":[0,0,0,0,1,1,1,1,1]})

In [356]: df
Out[356]: 
  Cat  Time  ID
0   A     0   0
1   B     0   0
2   A     1   0
3   B     1   0
4   A     0   1
5   B     0   1
6   A     1   1
7   B     1   1
8   C     1   1

In [357]: df.groupby(["ID","Cat"]).count()
Out[357]: 
        Time
ID Cat      
0  A       2
   B       2
1  A       2
   B       2
   C       1

In [358]: 

我想在这里看到的是,在 x 轴上,ID 在 y 轴上,我得到变量 Cat 堆叠的计数(时间列),例如对于 ID 1,我想看到一个堆叠的彩色条,其大小为 2、2 和 1。我尝试了以下操作但没有成功:

df.groupby(["ID","Cat"]).count().plot(kind="bar", stacked=True, x="ID")

因为它似乎无法处理多轴。非常感谢任何帮助!

python pandas seaborn
1个回答
1
投票

您需要

unstack
Cat
:

(df.groupby(['ID', 'Cat'])['Time'].count().unstack()
   .plot(kind='bar', stacked=True)
)

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.