Pandas 从多索引级别获取所有值

Posted

技术标签:

【中文标题】Pandas 从多索引级别获取所有值【英文标题】:Pandas Get All Values from Multiindex levels 【发布时间】:2016-09-08 12:36:32 【问题描述】:

给定以下数据透视表:

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

我想访问“C”(或级别 2)的每个值作为用于绘图的列表。 我想对“A”和“B”(0 级和 1 级)执行相同的操作,以保留间距,以便我也可以使用这些列表。我最终试图使用它们通过绘图来创建这样的东西:

Here's the question from which this one stemmed.

提前致谢!

【问题讨论】:

抱歉,如果您愿意,您是要table.index.get_level_values(2) 还是table.index.get_level_values('C') 就是这样!您可以发布作为答案吗? 【参考方案1】:

您可以使用get_level_values从多索引中获取特定级别的索引值:

In [127]:
table.index.get_level_values('C')

Out[127]:
Index(['a', 'b', 'a', 'b', 'a', 'a', 'b', 'a', 'b'], dtype='object', name='C')

In [128]:    
table.index.get_level_values('B')

Out[128]:
Index(['x', 'x', 'y', 'y', 'z', 'x', 'y', 'z', 'z'], dtype='object', name='B')

In [129]:
table.index.get_level_values('A')

Out[129]:
Index(['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], dtype='object', name='A')

get_level_values 接受级别或标签的 int 参数

请注意,对于较高级别,重复值以与最低级别的索引长度相对应,出于显示目的,您看不到这一点

【讨论】:

只是为了锦上添花,你能演示一下如何将'A'级的所有值替换为''除了中间值(或偶数的中上值,例如2nd如果是“A”级中的“b”值,则从顶部开始计算值)? 对不起,我不明白,您是在问如何压缩这些值,例如它们不会在给定级别重复? 我只想用空白替换所有值,除了中间的“A”级(0),这样当我将它们添加为第二轴和第三轴标签时(我会在如何尽快做到这一点),它们像我的示例图表一样排列显示。我还想对级别“B”(1)做类似的事情来保持间距。 我觉得你真的应该再发一个问题 好的,会的。谢谢!

以上是关于Pandas 从多索引级别获取所有值的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 多索引数据帧上绘制两个级别的 x_ticklabels [重复]

以长格式保存具有不同级别名称的多索引列 Pandas 为 excel 格式

使用 pandas 进行多索引和绘图

使用索引值列表对 pandas 多索引数据框进行切片 [重复]

Pandas:根据条件为多索引数据帧的子集设置值的正确方法

Pandas:将多索引级别作为系列