层次化索引
层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以降低唯独形式处理高维度数据。
带有MultiIndex索引的Series的格式化输出格式。索引之间的"间隔"表示"直接使用上面的标签":
对于一个层次化的索引的对象,选取数据子集的操作很简单:
有时甚至还可以在"内层"中进行选取:
层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色。比如,这段数据可以通过其unstack方法被重新安排到一个DataFrame中:
unstack的运算是stack
对于一个DataFrame,每条轴都可以有分层索引:
各层都可以有名字(可以是字符串,也可以是别的Python对象)。如果指定了名称,它们就会显示在控制台输出中(不要将索引名称跟轴标签混为一谈):
由于有了分部的列索引,因此可以轻松的选取列分组:
可以单独创建MultiIndex然后复用。上面那个DataFrame中的(分级的)列可以这样创建:
重新分级顺序
有时,你需要重新调整某条轴上各级别的顺序,或根据指定级别上的值 对数据进行排序。swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化):
而sortlevel则根据单个级别中的值对数据进行排序(稳定的)。交换级别时,常常也会用到sortlevel,这样最终结果就是有序的了:
根据级别汇总统计
许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。
使用DataFrame的列
人们经常想要将DataFrame的一个或多个列当行索引来用,或者可能希望将行索引变成DataFrame的列。以下面这个DataFrame为例:
DataFrame的set_index函数会将其中一个或多个列转换为行索引,并创建一个新的DataFrame.
默认情况下,那些列会从DataFrame中移除,但可以将其保留下来。
reset_index的功能跟set_index刚好相反,层次化索引的级别会被转移到列里面: