Python数据分析第六课:多层索引

本文详细介绍了Python数据分析库Pandas中的多层索引,包括创建、取值和排序。通过实例展示了如何创建Series和DataFrame的多层索引,以及使用[]、loc和iloc等方法进行数据取值。同时,讲解了多层索引的排序方法,如何通过level参数指定索引层级进行排序。最后,提供了相关练习以巩固所学知识。
摘要由CSDN通过智能技术生成

多层索引是Pandas中一个比较核心的概念,允许你在一个轴向上拥有多个索引层级,许多同学不能处理复杂的数据,最大的问题在于没法灵活的处理多层索引。

而gruopby()方法可以生成带有多层索引的结果。

一、多层索引的创建

我们先看看Series多层索引的创建方法。

import pandas as pd

se = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'],
                                   ['期中','期末','期中','期末','期中','期末']])
se
张三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

张三那一列是数据的第一层索引,期中那一列是数据的第二层索引,而第二层索引值是和数据一一对应的。

我们在创建的时候发现,也需要将名字和考试阶段一一对应,才可以。如下所示:

现在,我们将数据增加几个科目的成绩,演示DataFrame多层索引的创建方法。由于成绩的数据比较多,我们将使用numpy的随机数方法构建成绩数据。

import numpy as np

data = np.random.randint(0,100,size=(6,3))
data
array([[77, 71,  4],
       [82, 81, 77],
       [75, 67, 52],
       [53, 84, 53],
       [86, 95, 10],
       [92, 34, 48]])

np.random.randint(0,100,size=(6,3))是使用numpy中的随机模块random中,生成随机整数方法randint,里面的参数size是指定生成6行3列的数据,并且每个数字的范围在0到100之间。

现在,我们知道了实验数据如何创建,下面我们根据Series的创建方法创建多层索引的DataFrame。

import pandas as pd 
import numpy as np

data = np.random.randint(0,100,size=(6,3))

df = pd.DataFrame(data=data,index=[['张三','张三','李四','李四','王五','王五'],
                             ['期中','期末','期中','期末','期中','期末']],
                 columns=['Jave','Web','Python'])
df
Jave Web Python
张三 期中 23 9 35
期末 38 6 10
李四 期中 39 54 51
期末 57 54 19
王五 期中 84 33 17
期末 19 91 39

我们虽然成功的创建了DataFrame的多层索引,但是有一个问题,在设置索引的时候会有很多重复的索引值,如何才能简化索引的写法呢?

Pandas为了解决这个问题,提供了一个创建多层索引的构造方法。

**pd.MultiIndex.from_product()**构建索引的方式,对我们来说会好理解一些。

首先,确定每一层索引的值什么,然后以列表的形势传给from_product()方法即可。

import pandas as pd
import numpy as np

data = np.random.randint(0,100,size=(8,3))
names 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值