开启掘金成长之旅!这是我参与「掘金日新计划 · 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的使用方式和[]的方式基本一样:
但是,iloc的取值并不会受多层索引影响,只会根据数据的位置索引进行取值。
对于多层索引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。
通过结果可以看出数据会根据第二层索引值进行相应的降序排列,如果索引值相同时会根据其他层索引值排列。
排序例子:
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
# 按索引排序的默认参数
df.sort_index() # 每一层索引都会从小到大进行排列
# df.sort_index()中的level参数可以按照指定的层级进行排列,第一层级索引值为0,第二层级索引值为1。ascending决定升降序,默认升序。
df.sort_index(level=1) # 按照第二级index进行升序排列,若索引值相同,则会根据其他层索引值排列。
