pandas.groupby()。plot()每组的行堆积量,不是实际值

时间:2019-09-04 20:44:31

标签: python pandas plot bar-chart stacked-chart

我正在尝试创建一个堆叠的条形图,以显示客户的两种交易类型。该图按周分类为列。 我的代码结构中的示例代码如下:

%matplotlib inline
import pandas as pd
values = [('1','2019-07-28','retail',11),
          ('1','2019-07-28','wholesale',18),
          ('1','2019-08-04','retail',7),
          ('1','2019-08-04','wholesale',12),
          ('1','2019-08-11','retail',6),
          ('1','2019-08-11','wholesale',16)]

columns = ['customer_id','week',
           'transaction_type',
           'sale_count']

df = pd.DataFrame(values, columns=columns)

df.groupby(['week','transaction_type']).size()\
  .unstack()\
  .plot(sort_columns='week',
        kind='bar', stacked=True);

我得到的结果是每个transaction_type的行计数为1或2

当前: result_im_currently_getting

我需要一个堆叠的条形图,它给出了一周中列出的每个日期的sale_count的总和,如下所示:

预期:

result_im_trying_to_get

有人可以告诉我我在做什么错吗?

2 个答案:

答案 0 :(得分:1)

类似于评论:

(df.groupby(['week','transaction_type'])['sale_count']
   .sum().unstack('transaction_type')
   .plot.bar(stacked=True)
)

输出:

enter image description here

答案 1 :(得分:0)

@Quang Hoang的回答是正确的,应该接受并接受。这只是有关格式化代码的注释。我想最好删除多余的圆括号并将图例移到外部,如以下代码所示

df.groupby(['week','transaction_type'])['sale_count']\
   .sum().unstack('transaction_type')\
   .plot.bar(stacked=True, rot=0)\
   .legend(bbox_to_anchor=(1.3, 1.0));

enter image description here

相关问题