【问题标题】:Plotting a stacked bar graph after grouping data on multiple columns在对多列上的数据进行分组后绘制堆积条形图
【发布时间】:2019-09-30 09:42:16
【问题描述】:

我有一个 Pandas 数据框,它有 2 列,例如 -

Vendor     Product    Category
VendorA    ProdABC       B
VendorA    ProdXYZ       C
VendorAB   ProdCDC       A
VendorAB   ProdDEF       A
VendorAB   ProdKLM       B
VendorF    ProdXYZ       D
VendorC    ProdBSE       C
VendorF    ProdFGH       D
VendorAB   ProdMNO       D
VendorA    ProdFGH       D
VendorV    ProdCDC       A
VendorF    ProdBSE       C

我需要 -

  1. 找出列出产品数量最多的前 10 家供应商,并
  2. 创建一个堆叠条形图 (matplotlib),描述前 10 名供应商的产品数量按类别细分,以显示前 10 名供应商销售的产品总数和产品类别的比较。

我该怎么做?

【问题讨论】:

    标签: python-3.x pandas matplotlib


    【解决方案1】:

    我将使用您在问题中显示的数据框

    第一个任务使用groupby.size

    top10=df.groupby('Vendor').size().sort_values(ascending=False).head(10)
    print(top10)
    
    
    
    Vendor
    VendorAB    3
    VendorA     2
    VendorF     1
    dtype: int64
    

    top10vendors(使用:DataFrame.isin)和categories创建组后,使用DataFrame.unstackDataFrame.plot进行绘图:

    top10_by_categories=df[df['Vendor'].isin(top10vendors)].groupby(['Vendor','Category']).count()['Product'].unstack()
    categories=top10_by_categories.columns
    top10_by_categories['total']=top10_by_categories.sum(axis=1)
    top10_by_categories.sort_values(by='total',ascending=False,inplace=True)
    print(top10_by_categories)
    top10_by_categories[categories].plot(kind='bar',stacked=True)
    
    
    
    
    
    Category    A    B    C    D  total
    Vendor                             
    VendorAB  2.0  1.0  NaN  NaN    3.0
    VendorA   NaN  1.0  1.0  NaN    2.0
    VendorF   NaN  NaN  NaN  1.0    1.0
    

    【讨论】:

    • 不应该是groupby(['Vendor', 'Category'])吗?我需要 X 轴上的顶级供应商以及按不同堆叠类别分类的每个供应商的产品。
    • 感谢@lostCode!!这对我行得通。 :) 如何仅获取图例中的类别名称,而不是 (Product, CategoryName)?
    • 您只需要使用droplevel 删除产品级别,然后它就会从图例中消失。我更新了代码
    • 有没有办法按产品降序显示供应商(在这种情况下,从左到右为 VendorAB、VendorA、VendorF)?
    • 我按照供应商的降序更新代码
    猜你喜欢
    • 2019-04-24
    • 2021-10-07
    • 2012-09-17
    • 2021-12-27
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多