首页常见问题正文

一起认识层次化索引【Pandas相关知识】

更新时间:2023-01-29 来源:黑马程序员 浏览量:

IT培训班

  前面所涉及的Pandas对象都只有一层索引结构(行索引、列索引),又称为单层索引,层次化索引可以理解为单层索引的延伸,即在一个轴方向上具有多层索引。

  对于两层索引结构来说,它可以分为内层索引和外层索引。以某些省市的面积表格为例,我们来认识一下什么是层次化索引,具体如图3-6所示。

1674977702873_层次化索引图示.jpg

  图3-6 层次化索引图示

  在图3-6中,按照从左往右的顺序,位于最左边的一列是省的名称,表示外层索引,位于中间的一列是城市的名称,表示内层索引,位于最右边的一列是面积的大小,表示数据。

  Series和DataFrame均可以实现层次化索引,最常见的方式是在构造方法的index参数中传入一个嵌套列表。接下来,以图3-6为例,创建具有两层索引结构的Series和DataFrame对象,具体如下:

  (1)创建具有两层索引结构的Series对象,具体代码如下。

   In [65]: import numpy as np
         import pandas as pd
         mulitindex_series = pd.Series([15848,13472,12073.8,
            7813,7446,6444,15230,8269],
              index=[['河北省','河北省','河北省','河北省',
                      '河南省','河南省','河南省','河南省'],
                     ['石家庄市','唐山市','邯郸市','秦皇岛市',
                      '郑州市','开封市','洛阳市','新乡市']])
         mulitindex_series
Out[65]:
河北省 石家庄市       15848.0
        唐山市       13472.0
        邯郸市       12073.8
      秦皇岛市         7813.0
河南省   郑州市         7446.0
        开封市         6444.0
        洛阳市        15230.0
        新乡市         8269.0

  上述示例中,在使用构造方法创建Series对象时候,index参数接收了一个嵌套列表来设置索引的层级,其中,嵌套的第一个列表会作为外层索引,而嵌套的第二个列表会作为内层索引。

  (2)创建具有两层索引结构的DataFrame对象,具体代码如下。

   In [66]: import pandas as pd
         from pandas import DataFrame, Series
         # 占地面积为增加的列索引
         mulitindex_df = DataFrame({ ‘占地面积’ :[15848, 13472, 12073.8,
                                     7813, 7446, 6444, 15230, 8269]},
                         index=[['河北省','河北省','河北省','河北省',
                                 '河南省','河南省','河南省','河南省'],
                                ['石家庄市','唐山市','邯郸市','秦皇岛市',
                                 '郑州市','开封市','洛阳市','新乡市']])
         mulitindex_df
Out[66]:
                    占地面积
河北省      石家庄市  15848.0
           唐山市    13472.0
           邯郸市    12073.8
          秦皇岛市    7813.0
河南省       郑州市    7446.0
            开封市    6444.0
            洛阳市   15230.0
            新乡市    8269.0

  使用DataFrame生成层次化索引的方式与Series生成层次化索引的方式大致相同,都是对参数index进行设置。

  需要注意的是,在创建层次化索引对象时,嵌套函数中两个列表的长度必须是保持一致的,否则将会出现ValueError错误。

  除了使用嵌套列表的方式构造层次化索引以外,还可以通过MultiIndex类的方法构建一个层次化索引。MultiIndex类提供了3种创建层次化索引的方法,具体如下:

  ◆MultiIndex.from_tuples():将元组列表转换为MultiIndex。

  ◆MultiIndex.from_arrays():将数组列表转换为MultiIndex。

  ◆MultiIndex.from_product():从多个集合的笛卡儿乘积中创建一个MultiIndex。

  使用上面的任一种方法,都可以返回一个MultiIndex类对象。在MultiIndex类对象中有三个比较重要的属性,分别是levels、labels和names,其中,levels表示每个级别的唯一标签,labels表示每一个索引列中每个元素在levels中对应的第几个元素,names可以设置索引等级名称。

分享到:
在线咨询 我要报名
和我们在线交谈!