【问题标题】:pandas.groupby().plot() stacking amount of rows per group by, not actual valuespandas.groupby().plot() 堆叠每组的行数,而不是实际值
【发布时间】:2020-01-07 18:16:24
【问题描述】:

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

%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

当前:

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

预期:

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 我想你想要的是销售额的总和而不是数量。所以只需将.count() 替换为.sum()

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


【解决方案1】:

类似于评论:

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

输出:

【讨论】:

    【解决方案2】:

    @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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多