本文介绍了 pandas 数据透视表到条形图保存层次结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出以下数据透视表:

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

我想创建一个水平条形图,该条形图保留索引的层次结构.

I'd like to create a horizontal bar chart which preserves the hierarchical layout of the indices.

当前,如果我这样做:

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

我明白了:

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

But what I really want is something like this:

推荐答案

它可以保留层次结构,但是它与您绘制的图形并不完全相同:

well it preserves hierarchy, but it's not exactly what you've plotted as your desired graph:

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

这篇关于 pandas 数据透视表到条形图保存层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-25 07:10