【问题标题】:Pandas pivot table to Bar Chart Preserving HierarchyPandas 数据透视表到条形图保留层次结构
【发布时间】:2016-09-07 11:26:15
【问题描述】:

给定以下数据透视表:

df=pd.DataFrame({'A':['a','a','a','a','a','b','b','b','b'],
                 'B':['x','y','z','x','y','z','x','y','z'],
                 'C':['a','b','a','b','a','b','a','b','a'],
                 'D':[7,5,3,4,1,6,5,3,1]})
table = pd.pivot_table(df, index=['A', 'B','C'],aggfunc='sum')
table

            D
A   B   C   
a   x   a   7
        b   4
    y   a   1
        b   5
    z   a   3
b   x   a   5
    y   b   3
    z   a   1
        b   6

我想创建一个水平条形图,以保留索引的分层布局。

目前,如果我这样做:

%matplotlib inline
a=table.plot(kind='barh')
a.show()

我明白了:

但我真正想要的是这样的:

【问题讨论】:

    标签: python-3.x pandas matplotlib pivot-table hierarchical


    【解决方案1】:

    它保留了层次结构,但它并不完全是您绘制的所需图表:

    orig_index = table.index
    
    idx = (a.apply(lambda row: '{} {} {}'.format(
                        row['a'] if a.shift(1).ix[row.name, 'a'] != row['a'] else ' ',
                        row['b'] if a.shift(1).ix[row.name, 'b'] != row['b'] else ' ',
                        row['c']), axis=1)
    )
    
    table.index = idx[::-1]
    
    table.plot.barh()
    

    【讨论】:

    • 我想如果我可以多走一步,我可以使用它;如果我可以隔离索引级别 2 中的每个条目(使用 table.index.levels[2] 给出唯一值,但我需要所有值在数据透视表中按出现顺序排列),并且对其他级别执行相同操作,我认为我可以将它们绘制在一个表格中,a la plt.table() 减去一些行。
    • 我在这里发布了一个与此相关的问题:stackoverflow.com/questions/37190938/…
    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2019-12-07
    • 2016-09-27
    • 2020-04-06
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多