pandas中高维数据的多层次索引

       在pandas中,当涉及到高维数据时,通常用多层次索引来表示。当然pandas中还有一个panel数据结构,可表示三维的数据,但是pandas官方推荐使用多层次索引,不提倡使用panel数据结构,而且panel未来也将会被pandas抛弃。下面我们来说明一下pandas中多层次索引该怎么使用。

       本文以pandas中的DataFrame数据结构为例,先构造一个含有多层次索引的DataFrame对象,如图一:

图一

       对多层次索引,我们还是从标签索引和位置索引分别说明。首先是标签索引,如图二,如果要索引第一层索引对应的内容,直接df_m.loc['a'],如果要索引某一行,比如第一行,则有两种索引方式,df_m.loc['a','a1'] or df_m.loc[('a','a1')],如果要索引某一列,比如第一列,则df_m.loc['a','c'],如果要索引具体某个值,比如第一个值,则df_m.loc[('a','a1'),'c'],这里需要注意的是,对于Multi_index的层次索引,是利用元组参数实现的。

图二

       然后是位置索引,如图三,此时可以忽略外面的两层index,直接把数据看成一个二维的DataFrame即可。

图三

       最后我们再看下多重索引对象是什么样的。如图四,df_m的index属性是一个MultiIndex对象,其中有两个主要的属性:levels、labels,当我们想要获取具体的index时,可以通过levels属性获取,即df_m.index.levels,返回一个列表,其中的元素是两层索引构成的列表,然后如果我们需要获取具体的索引,直接利用正常的列表索引即可得到。但要特别注意的是,这里的levels中的子列表是已经经过排序的,而不是原索引的顺序(这点我觉得是个没设计好的地方,大可以返回原顺序,是否排序用户本可以自己选择相应的排序方法解决),所以如果我们需要的是原顺序的索引,那么可以对df_m.index对象使用列表解析,因为可以把df_m.index看做是一个由索引元组组成的ndarray使用,然后得到列表后,可以转化为ndarray或者Series对象,再使用pandas或者Series的unique()函数来获取无重复的最外层索引。

图四

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/82847216
今日推荐