学习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,只不过表示列而已。
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的意义?
levels和codes是为了确定多级索引的对应关系。
这个表格恰恰是frame的index对应关系,我们的解读是正确的。
columns同理,这里不再赘述了。
注意:在pandas version 0.24.0之前,codes用labels来表示的,意义相同。