Pandas系列(十三)分层索引MultiIndex

  在上一小节Pandas系列(十三)实现groupby分组统计中可以实现多个key进行聚合,而这就是分层索引。

  使用这种在一个维度上拥有多个索引的层级,可以表达更高维度数据的形式。能够实现更高效的数据筛选。

获取数据

Pandas系列(十三)分层索引MultiIndex

Series的分层索引MultiIndex

  使用之前的多key索引,得到如下结果:

Pandas系列(十三)分层索引MultiIndex

  可以看到公司这一列下有一些空白,空白的意思是使用上面的值。他的index是由一个元组组成的list。

Pandas系列(十三)分层索引MultiIndex

  对于这种只有两级的series,可以使用方法unstack将二级索引变成列:

Pandas系列(十三)分层索引MultiIndex

  reset_index()方法可以将索引之后的结果转成一个dataframe

Pandas系列(十三)分层索引MultiIndex

Series有多层索引怎样筛选数据?

  对于多层索引的取值,可以采用元组的形式:

Pandas系列(十三)分层索引MultiIndex

  如上例所示:如果想直接筛选第二级的索引,就可以将第一级设置为

DataFrame的多层索引MultiIndex

  对于DataFrame格式的数据,可以采用set_index()方法,将DataFrameindex设置为多层索引:

Pandas系列(十三)分层索引MultiIndex

  它的index也是MultiIndex的,里面是一个元组,与Series类似。如果对Index进行排序的话,直接调用sort_index方法就可以实现:

Pandas系列(十三)分层索引MultiIndex

DataFrame有多层索引怎样筛选数据?

  这里要区分多层索引,和多个key索引:

  • 元组(key1,key2)代表筛选多层索引,其中key1是索引第一级,key2是第二级,比如key1=JD, key2=2019-10-02
  • 列表[key1,key2]代表同一层的多个KEY,其中key1key2是并列的同级索引,比如key1=JD, key2=BIDU
  1. 选中二级索引取不同的列

Pandas系列(十三)分层索引MultiIndex

  1. 列表取不同的key

Pandas系列(十三)分层索引MultiIndex

  1. 元组和列表混合索引

Pandas系列(十三)分层索引MultiIndex

  1. 筛选这一索引的所有内容

  利用slice(None)可以筛选这一索引的所有内容:

Pandas系列(十三)分层索引MultiIndex