多层索引的取值

162 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

多层索引的取值

 import pandas as pd
 s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
 ['期中','期末','期中','期末','期中','期末']])
 print(s)

可以直接使用 [] 的方式取最外面的一个层级s['张三’]

 期中    1
 期末    2
 dtype: int64

注意:[]取值方式,不可直接使用最外层以外的其他层级,例如:s['期末']

使用[]的方式,获取某个数据:s['张三','期末']

注意:['张三','期末']他们的顺序不能变。剥洋葱原则,从外到内一层一层的剥。

使 用 [] 的切片 , 获 取 数 据s[:,'期中']

使用loc、iloc、取值

loc使用的是标签索引,iloc使用的是位置索引

loc的使用方式和[]的方式基本一样:

image.png

但是,iloc的取值并不会受多层索引影响,只会根据数据的位置索引进行取值。

image.png

对于多层索引DataFrame 的取值,推荐使用loc()函数

1.3 多层索引的排序

有时候,我们需要将分组或创建出来的多层索引数据,根据索引值进行排序。

现在我们就需要明确默认是如何排序的?还有就是如何指定某一个索引列进行排序?

为方便大家理解,我们先创建一个简单的多层索引数据:

DataFrame索引排序的方法是sort_index()

 s.sort_index(ascending=False)
 王五  期末    6
      期中    5
 李四  期末    4
      期中    3
 张三  期末    2
      期中    1
 dtype: int64

每一层都会根据索引值进行相应的升序排列。

df.sort_index()中的level参数可以指定是否按照指定的层级进行排列,第一层级索引值为0,第二层级索引值为1。

image.png

通过结果可以看出数据会根据第二层索引值进行相应的降序排列,如果索引值相同时会根据其他层索引值排列。

排序例子:

 import pandas as pd
 import numpy as np
 data = np.random.randint(0,100,size=(9,3))
 key1 = ['B','C','A']
 key2 = [2,1,3]
 index = pd.MultiIndex.from_product([key1,key2])
 df = pd.DataFrame(data,index=index,columns=['Chinese','Math','English'])
 df

image.png

image.png

 # 按索引排序的默认参数
 df.sort_index() # 每一层索引都会从小到大进行排列

image.png

 # df.sort_index()中的level参数可以按照指定的层级进行排列,第一层级索引值为0,第二层级索引值为1。ascending决定升降序,默认升序。
 df.sort_index(level=1) # 按照第二级index进行升序排列,若索引值相同,则会根据其他层索引值排列。

image.png