pandas 设置多重索引_数据分析——pandas 多重索引
目标:学会多层索引的创建学会多层索引的取值学会多层索引的排序一、多层索引的创建1、给Series创建索引① ⽅式⼀:直接使⽤index参数创建 在使⽤index参数时,index的值是⼀个列表,其中的元素是多个列表,每个列表就是⼀层索 引,举个栗⼦:import pandas as pd# 创建Series索引s = pd.Series([1,2,3,4,5,6],index=[['张三','张三
目标:
学会多层索引的创建
学会多层索引的取值
学会多层索引的排序
一、多层索引的创建
1、给Series创建索引
① ⽅式⼀:直接使⽤index参数创建 在使⽤index参数时,index的值是⼀个列表,其中的元素是多个列表,每个列表就是⼀层索 引,举个栗⼦:
import pandas as pd
# 创建Series索引
s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王 五'], ['期中','期末','期中','期末','期中','期 末']])
print(s)
image.png
我们来看⼀下输出结果:第⼀列的张三、李四、王五是第⼀层的索引,第⼆层的期中、期末是 第⼆层的索引。第三列的就是对应的数据
这种建索引的⽅式写起来很麻烦,我们要写很多重复的内容,所以pandas给我们提供了另⼀ 种⽅式(MultiIndex.from_product() )来构建多层索引
②⽅式⼆:使⽤MultiIndex.from_product()方法构建 ⾸先我们把每层需要的索引写⼊到⼀个列表中,将这些列表在存⼊到⼀个新的列表当中,作为 参数传⼊MultiIndex.from_product()方法中,把结果赋值给变量index,那么这个index就 是我们构造好的索引,我们只需要在创建Series的时候传入索引即可
names = ['张三','李四','王五']
exam = ['期中','期末']
index = pd.MultiIndex.from_product([names,exam])
s = pd.Series([1,2,3,4,5,6],index=index)
print(s)
image.png
2、给dataframe创建索引
①⽅式⼀:直接使⽤index参数创建 与Series创建索引的⽅法类似,同样是加了⼀个参数,但是因为这⾥是⼆维的数据,所以添加 ⾏索引后还需要添加列索引,那么我们就需要在增加⼀个参数 columns来表示列索引,举个栗⼦:
import numpy as np
data = np.random.randint(0, 100, size=(6, 3))
df = pd.DataFrame(data, index=[['张三', '张三', '李四', '李四', '王五', '王五'], ['期中', '期末', '期中', '期末', '期中', '期 末']], columns=['Java', 'Web', 'Python'])
print(df)
image.png
② ⽅式⼆:使⽤MultiIndex.from_product()方法构建
data = np.random.randint(0, 100, size=(6, 3))
names = ['张三', '李四', '王五']
exam = ['期中', '期末']
index = pd.MultiIndex.from_product([names, exam])
df = pd.DataFrame(data, index=index, columns=['Java', 'Web', 'Python'])
print(df)
image.png
与Series⼀样,Dataframe也可以利⽤MultiIndex.from_product()方法来创建索引,用法是 一样的
3、索引的顺序不同,⽣成的数据也是不⼀样的,我们可以将上⾯的两个索引顺序颠倒以下来看⼀ 下输出结果
index = pd.MultiIndex.from_product([exam,names])
df = pd.DataFrame(data, index=index, columns=['Java', 'Web', 'Python'])
print(df)
可以看出期中、期末变成了第⼀层索引,姓名变成了第⼆层索引 在实际应⽤中,我们可以根据⾃⼰的需求来创建索引
二、根据索引提取数据
与字典的结构类似,我们可以⽤索引来逐层的提取数据,
1.提取Series数据
①使⽤[]提取
s = pd.Series([1,2,3,4,5,6],index=[['张三er','张三','李wu','李四','王五','王 五'], ['期中','期末','期中','期末','期中','期 末']])
res = s['张三','期末']
print(res)
结果:2
我们还可以利⽤loc和iloc来提取数据
②使⽤loc提取数据
loc提取数据的⽅式与使⽤中括号 []差不多
s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李wu','李四','王五','王 五'], ['期中','期末','期中','期末','期中','期 末']])
res1 = s.loc['张三']
print(res1)
image.png
③使⽤多层索引提取数据
res2 = s.loc['张三','期中']
print(2,res2)
res3 = s.loc['张三'].loc['期中']
print(3,res3)
res4 = s.loc[:,'期中']
print(4,res4)
image.png
总结以下loc的使⽤⽅式(获取张三的期中成绩):
s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李wu','李四','王五','王 五'], ['期中','期末','期中','期末','期中','期 末']])
res2 = s.loc['张三','期中']
print(res2)
res3 = s.loc['张三'].loc['期中']
print(res3)
res5 = s.loc[('张三','期中')]
print(res5)
④使⽤iloc提取数据
iloc与loc的区别是iloc是利⽤的位置索引
res7 = s.iloc[0]
print(res7)
结果:1
三、排序
sort_index()⽅法
level=0 表示按照第⼀层索引进⾏排序,默认为0,为1表示优先按照第⼆层索引 ...
ascending=False 表示从⼤到⼩进⾏排列,默认为True(从⼩到⼤排序)
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=['Java','Web','Python'])
res1 = df.sort_index()
res2 = df.sort_index(level=0,ascending=False)
print(df)
print('----------------------------')
print(res1)
print('----------------------------')
print(res2)
image.png
我们来看⼀下按照第⼆层索引排序的情况
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=['Java','Web','Python'])
res1 = df.sort_index()
res2 = df.sort_index(level=1,ascending=False)
print(df)
print('----------------------------')
print(res1)
print('----------------------------')
print(res2)
image.png
更多推荐
所有评论(0)