pandas 随时间变化的聚集堆积条形图

niwlg2el  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(140)

我有一个 Dataframe 如下:

time       type      category   count
2021/01/01   regular       A         2
2021/01/02   new           B         3
2021/01/02   regular       A         5
2021/01/03   new           A         1
... and so on

我想要的是一个聚集的堆叠条形图,这样时间在x轴上,并且是有序的,计数在y轴上,并且该图应该能够告诉信息,例如在特定的一天,有多少个类别A的常规类型访问了(计数),当天有多少个常规类型,对于新类型也是如此。
我假设为此,我们首先需要以某种方式转换数据,以便我们也具有零计数的所有组合,因此如上表中的第一个条目将被转换为四个条目,如:

time       type      category   count
2021/01/01   regular       A         2
2021/01/01   regular       B         0
2021/01/01   new           A         0
2021/01/01   new           B         0
... and so on

请指导我如何实现我想要的。我对视觉化的东西还是个新手

编辑我可以使用以下方法填充缺失值:

pd.DataFrame({'count' :df.groupby(['time','type','category']).size().unstack(fill_value=0).stack()}).reset_index()

仍然不确定如何在堆叠多条形图中绘制此图。如果有比这个情节更好的选择,请建议.

0s0u357o

0s0u357o1#

你所期望的并不完全清楚(请提供一个例子,即使只是一个示意图),但这里有一些例子。
首先,您需要使用pivot重新编写一点dataframe:

df_pivot = df.pivot(index='time', columns=['type', 'category']).fillna(0)['count']
df_pivot

输出:

type       regular  new     
category         A    B    A
time                        
2021/01/01     2.0  0.0  0.0
2021/01/02     5.0  3.0  0.0
2021/01/03     0.0  0.0  1.0

然后,您可以使用以下命令进行绘图:

df_pivot.plot.bar(stacked=True)

如果你想确保你有所有的类别,你需要reindex

import itertools
idx = itertools.product(df['type'].unique(), df['category'].unique())
df_pivot = df_pivot.reindex(idx, axis=1).fillna(0)
df_pivot.plot.bar(stacked=True)

相关问题