分组熊猫系列的堆积条形图

时间:2018-11-28 17:48:21

标签: python pandas matplotlib

您好,它的数据框如下所示:

ID  Date  Total_Amount  priority
1   2007  4488          High 
2   2007  40981         Low
3   2017  450           Medium
4   2008  1000          Low

每行是一个新人(ID),并且各行显示他们每年花费多少(总计)。

我想创建一个条形图,在x轴上使用年,将Total_Amount作为y轴高度,但是需要按优先级对其进行堆叠。例如如果2007年有10笔支出的钱,其Total_Amount总金额为100,000英镑,则按优先级将栏的高度设置为100,000(例如5笔高,4笔低和1笔中等)。

我尝试使用交叉表,将日期作为行,将优先级作为列,但是我没有得到Total_Amount花费的数据框,而每个优先级的人数却得到一个数据框。

2 个答案:

答案 0 :(得分:0)

您可以先使用groupby(),然后再使用unstack()

df2 = df.groupby(['Date','priority'])['Total_Amount'].sum().unstack('priority').fillna(0)
df2.plot(kind='bar', stacked=True)

产生:

enter image description here

答案 1 :(得分:0)

几乎相同,我们仍在使用crosstab

pd.crosstab(index=df.Date,columns=df.priority,values=df.Total_Amount,aggfunc='sum')\
    .fillna(0).plot(kind='bar')