分层索引是pandas的重要特性,允许在一个轴向上拥有多个(两个或两个以上)索引层级。笼统地说,分层索引提供了一种在更低维度的形式中处理更高维度数据的方式。先创建一个Series,以列表的列表(或数组)作为索引:
你看到的是一个以MultiIndex作为索引的Series的美化视图。索引中的“间隙”表示“直接使用上面的标签”:
通过分层索引对象,也可以称为部分索引,允许你简洁地选择出数据的子集:
在“内部”层级中进行选择也是可以的:
分层索引在重塑数据和数组透视表等分组操作中扮演了重要角色。例如,你可以使用unstack方法将数据在DataFrame中重新排列:
unstack的反操作是stack:
在DataFrame中,每个轴都可以拥有分层索引:
分层的层级可以有名称(可以是字符串或Python对象)。如果层级有名称,这些名称会在控制台输出中显示:
通过部分列索引,可以选出列中的组:
有时,需要重新排列轴上的层级顺序,或者按照特定层级的值对数据进行排序。swaplevel接收两个层级序号或层级名称,返回一个进行了层级变更的新对象(但是数据是不变的):
另一方面,sort_index只能在单一层级上对数据进行排序。在进行层级变换时,使用sort_index以使得结果按照层级进行字典排序也很常见:
注意:如果索引按照字典顺序从最外层开始排序,那么数据选择性能会更好——调用sort_index(level=0)或sort_index可以得到这样的结果。
DataFrame和Series中很多描述性和汇总性统计有一个level选项,通过level选项你可以指定你想要在某个特定的轴上进行聚合。
通常不会使用DataFrame中一个或多个列作为行索引;反而你可能想要将行索引移动到DataFrame的列中。
DataFrame的set_index函数会生成一个新的DataFrame,新的DataFrame使用一个或多个列作为索引: