Python3 pandas.MultiIndex
层次化索引(hierarchical indexing)在一个轴上拥有多个(两个以上)索引级别,使用户能以低维度形式处理高维度数据。
参数
levels:每个等级上轴标签的唯一值
labels:以整数来表示每个level上标签的位置
sortorder:按照指定level上的标签名称的字典顺序进行排序(可选参数)
names:index level的名称
copy:布尔值,默认为False。是否拷贝元数据产生新的对象
verify_integrity:布尔值,默认为Ture。检查levels/labels是否持续有效
In [1]:
data = Series(np.random.randn(10),
index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
data
Out [1]:
a 1 -0.204708
2 0.478943
3 -0.519439
b 1 -0.555730
2 1.965781
3 1.393406
c 1 0.092908
2 0.281746
d 2 0.769023
3 1.246435
dtype: float64
In [2]:
data.index
Out [2]:
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],
labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])
- level中的唯一标签值集合分别为[‘a’, ‘b’, ‘c’, ‘d’]和[1, 2, 3]。
- data.index.levels[0]上的标签abcd对应的索引为0123。data.index.levels[1]上的标签123对应的索引为012。
- 外层level的label值[0, 0, 0, 1, 1, 1, 2, 2, 3, 3]表示对应的标签值分别出现几次:a和b为3次,c和d为2次
- 内层level的label值[0, 1, 2, 0, 1, 2, 0, 1, 1, 2]按个数与外层label相对应。例如:外层a出现3次,则内层label的前3个值与a相对应,这三个索引值为0,1,2,分别对应1,2,3。
df.swaplevel
DataFrame.swaplevel(i=-2, j=-1, axis=0)
返回互换了级别i和j的新对象,不改变原数据
In [3]:
frame = DataFrame(np.arange(12).reshape((4, 3)),
index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
columns=[['Ohio', 'Ohio', 'Colorado'],
['Green', 'Red', 'Green']])
frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color']
frame
Out [3]:
state Ohio Colorado
color Green Red Green
key1 key2
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11
In [4]:
frame.swaplevel('key1', 'key2')
Out [4]:
state Ohio Colorado
color Green Red Green
key2 key1
1 a 0 1 2
2 a 3 4 5
1 b 6 7 8
2 b 9 10 11
df.sortlevel
DataFrame.sortlevel(level=0, axis=0, ascending=True, inplace=False, sort_remaining=True)
按字典顺序在level中排序,即相同标签内部进行排序。
In [5]:
frame.sortlevel(1)
Out [5]:
state Ohio Colorado
color Green Red Green
key1 key2
a 1 0 1 2
b 1 6 7 8
a 2 3 4 5
b 2 9 10 11