层级索引(hierarchical indexing)
下面创建一个Series, 在输入索引Index时,输入了由两个子list组成的list,第一个子list是外层索引,第二个list是内层索引。
让我们认识一下层级索引吧:
import pandas as pd
import numpy as np
ser_obj = pd.Series(np.random.randn(12),index=[
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
print(ser_obj)
代码运行结果:
a 0 0.339618
1 -0.489586
2 -0.849233
b 0 0.638045
1 1.901217
2 -2.009243
c 0 0.469703
1 -0.560258
2 -0.992182
d 0 -0.429164
1 0.596181
2 0.780883
dtype: float64
认识了层级索引,我们看看层级索引有什么用呢?
根据索引获取数据。因为现在有两层索引,当通过外层索引获取数据的时候,可以直接利用外层索引的标签来获取。
当要通过内层索引获取数据的时候,在list中传入两个元素,前者是表示要选取的外层索引,后者表示要选取的内层索引。
内外层的选取
常用于分组操作、透视表的生成等
# coding:utf-8
import pandas as pd
import numpy as np
ser_obj = pd.Series(np.random.randn(12),index=[
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
print(ser_obj)
# 外层选取
print(ser_obj['c'])
print("*"*100)
# 内层索引
print(ser_obj[:,2])
a 0 -0.355108
1 -0.403158
2 -0.208994
b 0 -1.278609
1 -0.563352
2 1.094893
c 0 0.552347
1 -0.554993
2 0.873725
d 0 0.275341
1 0.201273
2 0.613563
dtype: float64
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 0.552347
1 -0.554993
2 0.873725
dtype: float64
****************************************************************************************************
a -0.208994
b 1.094893
c 0.873725
d 0.613563
dtype: float64
如果是层级索引,是否可以交换分层顺序?
.sortlevel(): .sortlevel( )先对外层索引进行排序,再对内层索引进行排序,默认是升序。
swaplevel():.swaplevel( )交换内层与外层索引。
# coding:utf-8
import pandas as pd
import numpy as np
ser_obj = pd.Series(np.random.randn(12),index=[
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
])
print(ser_obj)
print("*~"*100)
print(ser_obj.swaplevel()) # 交换内外层顺序
print("*"*100)
print(ser_obj.sortlevel()) # sortlevel先对外层索引进行排序,再对内层索引进行排序,默认是升序
代码运行结果:
a 0 0.634978
1 -0.800664
print(ser_obj.swaplevel().sortlevel()) # sortlevel先对外层索引进行排序,再对内层索引进行排序,默认是升序
2 -0.241773
b 0 0.617015
1 -0.289723
2 0.071330
c 0 -0.649187
1 0.559757
2 -1.160737
d 0 0.095962
1 1.154421
2 0.835440
dtype: float64
*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~
0 a 0.634978
1 a -0.800664
2 a -0.241773
0 b 0.617015
1 b -0.289723
2 b 0.071330
0 c -0.649187
1 c 0.559757
2 c -1.160737
0 d 0.095962
1 d 1.154421
2 d 0.835440
dtype: float64
****************************************************************************************************
0 a 0.634978
b 0.617015
c -0.649187
d 0.095962
1 a -0.800664
b -0.289723
c 0.559757
d 1.154421
2 a -0.241773
b 0.071330
c -1.160737
d 0.835440
dtype: float64