Python学习笔记: Pandas MultiIndex (多重索引)简要说明

本文同步发表于小弟自架网站:微确幸资讯站

资料範例是索引共有四层(0-3层),分别为['学年', '学期', '学制', '性别']
学年:108, 109
学期:1, 2
学制:"博士班", "硕士班", "大学部"
性别:"女", "男"
先看一下资料在Excel中的显示:
http://img2.58codes.com/2024/20122335WgrLyWj5cZ.jpg

import pandas as pdimport numpy as npyear = [108, 109]semester = [1, 2]academic = ['博士班', '硕士班', '大学部']gender = ['女', '男']index = pd.MultiIndex.from_product([year, semester, academic, gender],                           names=['学年', '学期', '学制', '性别'])df = pd.DataFrame(np.random.randint(300,size=(24,1)),index=index,columns=["学生人数"])df

输出结果太长,只截图一部份:
http://img2.58codes.com/2024/20122335P5n8BSxnY5.jpg

多重索引的样子:

df.index

http://img2.58codes.com/2024/20122335EG9GMhhJIh.jpg

多重索引的名字是FrozenList

df.index.names

FrozenList(['学年', '学期', '学制', '性别'])

# 多重索引第0层,也就是"学年"df.index.get_level_values(0)

Int64Index([108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109,
109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109],
dtype='int64', name='学年')

# 多重索引直接带入"学年",得到第0层的索引df.index.get_level_values('学年')

Int64Index([108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109,
109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109],
dtype='int64', name='学年')

# 多重索引第1层,也就是"学期"df.index.get_level_values(1)

Int64Index([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2],
dtype='int64', name='学期')

# 多重索引直接带入"学期",得到第1层的索引df.index.get_level_values('学期')

Int64Index([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
2, 2],
dtype='int64', name='学期')

以下类推第2层是"学制",第3层是"性别"

多重索引筛选资料

第0层资料,例如108学年资料

df.loc[(108)]#df.loc[108] #中括号裏面没有小括号也可以

http://img2.58codes.com/2024/201223358P5FlWcnmG.jpg

第1层资料,例如109学年第2学期资料

df.loc[(109, 2)]

http://img2.58codes.com/2024/20122335kS8JfMPnlA.jpg

第2、3层资料,就以上小括号裏面再把"学制"和"性别"的值带进去就可以得到。

多重索引更改不同索引层的值

将第0层索引[108, 109]更改为[2019, 2020]

dfcopy = df.copy()dfcopy.index = dfcopy.index.set_levels([2019, 2020] , level=0)dfcopy

输出结果太长,只截图一部份:
http://img2.58codes.com/2024/20122335qpC34lZwlH.jpg

将第0层索引[108, 109]及第1层索引[1, 2]分别更改为[2019, 2020]与['one', 'two']

dfcopy = df.copy()dfcopy.index = dfcopy.index.set_levels([[2019, 2020], ['one', 'two']] , level=[0,1])dfcopy

输出结果太长,只截图一部份:
http://img2.58codes.com/2024/20122335d9nnFZXjIS.jpg


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章