【问题标题】:stacked bar chart for grouped pandas series分组熊猫系列的堆积条形图
【发布时间】:2019-04-30 16:56:37
【问题描述】:

您好,有一个如下所示的数据框:

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

每一行都是一个新人 (ID),各行显示他们每年花费了多少(总金额)。

我想创建一个条形图,x 轴为年份,y 轴高度为 Total_Amount,但它需要按优先级堆叠。例如如果 10 个人在 2007 年花了钱,并且他们的 Total_Amount 总和为 100,000 英镑,则条形的高度需要按优先级堆叠为 100,000(例如,5 可能是高、4 低和 1 中)。

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

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

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

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

    生产:

    【讨论】:

      【解决方案2】:

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

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

      【讨论】: