Pandas MultiIndex 详解

文章目录

  • 1. 什么是Index
  • 2. 什么是MultiIndex
    • 2.1 levels和codes的意义

1. 什么是Index

  学习MultiIndex前,首先要看一下Index。
  Index是DataFrame的索引,如下代码生成一个DataFrame。

frame_index =  pd.DataFrame(np.arange(6).reshape((2,3)), index=['a','b'],
                     columns=['Ohio', 'Ohio', 'Colorado'])
frame_index
Ohio Ohio Colorado
a 0 1 2
b 3 4 5
frame_index.index
Index(['a', 'b'], dtype='object')

  可以看到index就一层‘a’和‘b’。

frame_index.columns
Index(['Ohio', 'Ohio', 'Colorado'], dtype='object')

  columns也是一个index,只不过表示列而已。

2. 什么是MultiIndex

  MultiIndex顾名思义是多级索引,看一下多级索引的DataFrame生成如下:

frame = pd.DataFrame(np.arange(12).reshape((4,3)), index=[['a', 'a', 'b', 'b'], [1,2,1,2]],
                     columns=[['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
frame					 
Ohio Colorado
Green Red Green
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11
frame.index
MultiIndex(levels=[['a', 'b'], [1, 2]],
           codes=[[0, 0, 1, 1], [0, 1, 0, 1]])

  可以看到当选择frame.index时候,对象变成了MultiIndex,这是因为MultiIndex是Index的一个子类,当DataFrame的index索引传入多列表时,自动构建多级索引,那么不禁要问levels和codes的意义?

2.1 levels和codes的意义

  levels和codes是为了确定多级索引的对应关系

  1. levels的第一级列表[‘a’,‘b’],对应codes的[0,0,1,1],codes中是0代表’a’的位置,1代表‘b’的位置。
  2. leves的第二级列表[1,2],对应codes的[0,1,0,1],codes中的0代表1的位置,1代表2的位置。
    两级位置确定后,根据codes位置标识绘制如下:
    在这里插入图片描述

  这个表格恰恰是frame的index对应关系,我们的解读是正确的。
  columns同理,这里不再赘述了。

  注意:在pandas version 0.24.0之前,codes用labels来表示的,意义相同。

你可能感兴趣的:(python,index,MultiIndex,Pandas)