Pandas将表转移到条形图保留层次结构

时间:2016-05-11 20:58:11

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

给出以下数据透视表:

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()

我明白了:

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分: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()

enter image description here