多级索引
多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。
实质上,单级索引对应Index对象,多级索引对应MultiIndex对象。
一、Series对象的多级索引
- 多级索引Series对象的创建
import pandas as pd import numpy as np se1=pd.Series(np.random.randn(4),index=[list("aabb"),[1,2,1,2]]) se1 Out[6]: a 1 0.357171 2 0.084055 b 1 -0.678752 2 0.132007 dtype: float64
- 子集的选取
se1['a'] Out[7]: 1 0.357171 2 0.084055 dtype: float64 se1['a':'b'] Out[8]: a 1 0.357171 2 0.084055 b 1 -0.678752 2 0.132007 dtype: float64
-
内层选取
se1[:, 1] Out[9]: a 0.357171 b -0.678752 dtype: float64 se1[:, 2] Out[10]: a 0.084055 b 0.132007 dtype: float64
二、DataFrame对象的多级索引
- 创建
df1=pd.DataFrame(np.arange(12).reshape(4,3),index=[list("AABB"),[1,2,1,2]],columns=[list("XXY"),[10,11,10]]) df1 Out[11]: X Y 10 11 10 A 1 0 1 2 2 3 4 5 B 1 6 7 8 2 9 10 11
- 赋名
df1.columns.names=['XY','sum'] df1.index.names=['AB','num'] df1 Out[12]: XY X Y sum 10 11 10 AB num A 1 0 1 2 2 3 4 5 B 1 6 7 8 2 9 10 11
- 创建MultiIndex对象再作为索引
df1.index=pd.MultiIndex.from_arrays([list("AABB"),[3,4,3,4]],names=["AB","num"]) df1 Out[13]: XY X Y sum 10 11 10 AB num A 3 0 1 2 4 3 4 5 B 3 6 7 8 4 9 10 11
- 可以对各级索引进行互换
df1.swaplevel('AB','num') Out[14]: XY X Y sum 10 11 10 num AB 3 A 0 1 2 4 A 3 4 5 3 B 6 7 8 4 B 9 10 11