分层/多级索引是非常令人兴奋的,因为它为一些相当复杂的数据分析和操作打开了大门,特别是对于处理高维数据。实际上,它使您能够在较低维的数据结构(如Series (1d)和DataFrame (2d))中存储和操作具有任意维数的数据。
在本节中,我们将展示“分层”索引的确切含义,以及它如何与上面和前面几节中描述的所有panda索引功能集成。稍后,在讨论对数据进行分组、旋转和重塑时,我们将展示一些重要的应用程序,以说明它如何帮助结构化数据以便进行分析。
一、创建多重索引(分层索引)对象
多索引对象是标准索引对象的层次模拟对象,标准索引对象通常在pandas对象中存储axis标签。您可以将MultiIndex看作元组数组,其中每个元组都是唯一的。可以从数组列表(使用MultiIndex.from_arrays())、元组数组(使用MultiIndex.from_tuples())、交叉迭代集(使用MultiIndex.from_product())或DataFrame(使用MultiIndex.from_frame())创建多索引。当向索引构造函数传递一组元组时,它将尝试返回一个多索引。下面的示例演示了初始化多索引的不同方法。
import pandas as pd
import numpy as np
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],\
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
tuples
'''
[('bar', 'one'),
('bar', 'two'),
('baz', 'one'),
('baz', 'two'),
('foo', 'one'),
('foo', 'two'),
('qux', 'one'),
('qux', 'two')]
'''
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
'''
MultiIndex([('bar', 'one'),
('bar', 'two'),
('baz', 'one'),
('baz', 'two'),
('foo', 'one'),
('foo', 'two'),
('qux&