pandas多层索引的创建和取值以及排序的实现

多层索引的创建

普通-多个index创建

  • 在创建数据的时候加入一个index列表,这个index列表里面是多个索引列表

Series多层索引的创建方法

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

张三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

利用 numpy中的随机数

import numpy as np

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

data
array([[44, 66, 67],
    [82, 52, 0],
    [34, 78, 23],
    [38, 4, 43],
    [60, 62, 40],
    [57, 9, 11]])

Dataframe多层索引创建

import pandas as pd
import numpy as np

data = np.random.randint(0,100,size=(6,3))
df = pd.DataFrame(data,index=[['张三','张三','李四','李四','王五','王五'],
               ['期中','期末','期中','期末','期中','期末']],
           columns=['Java','Web','Python'])

df
Java Web Python
张三 期中 68 4 90
期末 33 63 73
李四 期中 30 13 68
期末 14 18 48
王五 期中 34 66 26
期末 89 10 35

简化创建-from_product()

import pandas as pd
import numpy as np

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)
df
Java Web Python
张三 期中 51 78 47
期末 39 53 36
李四 期中 33 60 83
期末 90 55 3
王五 期中 37 45 66
期末 6 82 71

from_product()在这个里面的列表中位置不同, 产生的索引页会不同

index = pd.MultiIndex.from_product([exam, names])
df = pd.DataFrame(data,index=index,columns=['Java','Web','Python'])
# print(df)
df
Java Web Python
期中 张三 51 78 47
李四 39 53 36
王五 33 60 83
期末 张三 90 55 3
李四 37 45 66
王五 6 82 71

from_product([exam,names])会将列表中第一个元素作为最外层索引,依次类推

多层索引的取值

获取到我们想要的数据

获取多层索引Series中的数据

创建数据

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

张三  期中    1
    期末    2
李四  期中    3
    期末    4
王五  期中    5
    期末    6
dtype: int64

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

s['李四']

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

期中    3
期末    4
dtype: int64

使用['外索引', '内索引'], 获取某个数据

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

s['李四', '期中'] # 李四期中分值

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

3

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

s[:,'期中'] # 第一个值为全部的外索引

张三    1
李四    3
王五    5
dtype: int64

使用 loc

  • loc 使用的是标签suoyin
  • iloc使用的是位置索引
# loc 使用方式与 [] 的方式基本一样

s.loc['张三']
s.loc['张三','期中']
s.loc[:,'期中']

# iloc 的取值并不会受多层索引影响,只会根据数据的位置索引进行取值, 不推荐

张三    1
李四    3
王五    5
dtype: int64

多层索引DataFrame的取值

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

import pandas as pd
import numpy as np
#size参数是指定生成6行3列的数组
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'])
df
Java Web Python
张三 期中 3 40 52
期末 74 38 85
李四 期中 7 28 16
期末 9 25 0
王五 期中 13 24 8
期末 49 46 1

三种方式都可以获取张三期中各科成绩

# df.loc['张三','期中']
# df.loc['张三'].loc['期中']
# df.loc[('张三','期中')]

注意:DataFrame中对行索引的时候和Series有一个同样的注意点,就是无法直接对二级索引直接进行索引,必须让二级索引变成一级索引后才能对其进行索引

多层索引的排序

  • 使用sort_index() 排序
  • level参数可以指定是否按照指定的层级进行排列
  • 第一层索引值为0, 第二层索引的值为1

创建数据

import pandas as pd
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'])

df
Java Web Python
b 2 56 82 81
1 84 16 55
3 35 25 86
c 2 76 1 76
1 36 28 94
3 79 70 97
a 2 25 17 30
1 38 38 78
3 41 75 90

排序

  • DataFrame按行索引排序的方法是sort_index()
  • 如果直接使用的话,不传参数, 会把每一层索引根据值进行升序排序
df.sort_index()
Java Web Python
a 1 18 60 74
2 66 87 27
3 96 18 64
b 1 72 58 52
2 22 31 22
3 31 12 83
c 1 6 54 96
2 9 47 18
3 31 63 4
# 当level=0时,ascending=False, 会根据第一层索引值进行降序排序
df.sort_index(level=0,ascending=False)
Java Web Python
c 3 79 70 97
2 76 1 76
1 36 28 94
b 3 35 25 86
2 56 82 81
1 84 16 55
a 3 41 75 90
2 25 17 30
1 38 38 78
# 当level=1时,会根据第二层索引值进行降序排序

df.sort_index(level=1,ascending=False)

# 数据会根据第二层索引值进行相应的降序排列,
# 如果索引值相同时会根据其他层索引值排列
Java Web Python
c 3 79 70 97
b 3 35 25 86
a 3 41 75 90
c 2 76 1 76
b 2 56 82 81
a 2 25 17 30
c 1 36 28 94
b 1 84 16 55
a 1 38 38 78

通过level设置排序的索引层级,其他层索引也会根据其排序规则进行排序

到此这篇关于pandas多层索引的创建和取值以及排序的实现的文章就介绍到这了,更多相关pandas多层索引内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Pandas中给多层索引降级的方法

    # 背景介绍 通常我们不会在Pandas中主动设置多层索引,但是如果一个字段做多个不同的聚合运算, 比如sum, max这样形成的Column Level是有层次的,这样阅读非常方便,但是对编程定位比较麻烦. # 数据准备 import pandas as pd import numpy as np df = pd.DataFrame(np.arange(0, 14).reshape(7,2),columns =['a','b'] ) df.a = df.a %3 df['who'] = 'Bo

  • pandas多层索引的创建和取值以及排序的实现

    多层索引的创建 普通-多个index创建 在创建数据的时候加入一个index列表,这个index列表里面是多个索引列表 Series多层索引的创建方法 import pandas as pd s = pd.Series([1,2,3,4,5,6],index=[['张三','张三','李四','李四','王五','王五'], ['期中','期末','期中','期末','期中','期末']]) # print(s) s 张三  期中    1     期末    2 李四  期中    3    

  • Python pandas之多级索引取值详解

    目录 数据需求 需求拆解 需求处理 方法一 方法二 总结 最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pandas了,故而写下此系列以让更多的小伙伴们爱上pandas. 平台: windows 10 python 3.8 pandas 1.2.4 数据需求 给定一份多级索引数据,查找指定值. 需求拆解 数据提取在pandas中,或者说在python中就是索引式提取,在单层索引中采用.loc或.iloc方法已经非

  • python pandas创建多层索引MultiIndex的6种方式

    目录 引言 pd.MultiIndex.from_arrays() pd.MultiIndex.from_tuples() 列表和元组是可以混合使用的 pd.MultiIndex.from_product() pd.MultiIndex.from_frame() groupby() pivot_table() 引言 在上一篇文章中介绍了如何创建Pandas中的单层索引,今天给大家带来的是如何创建Pandas中的多层索引. pd.MultiIndex,即具有多个层次的索引.通过多层次索引,我们就可

  • Pandas的MultiIndex多层索引使用说明

    目录 MultiIndex多层索引 1.创建方式 1.1.第一种:多维数组 1.2.第二种:MultiIndex 2.多层索引操作 2.1.Series多层索引 2.2.DataFrame多层索引 2.3.交换索引 2.4.索引排序 2.5.索引堆叠 2.6.取消堆叠 2.7.设置索引 2.8.重置索引 MultiIndex多层索引 MultiIndex,即具有多个层次的索引,有些类似于根据索引进行分组的形式.通过多层次索引,我们就可以使用高层次的索引,来操作整个索引组的数据.通过给索引分类分组

  • Pandas数据分析-pandas数据框的多层索引

    目录 前言 创建多层索引 多层索引操作 索引名称的查看 索引的层级 索引内容的查看 数据查询 数据分组 前言 pandas数据框针对高维数据,也有多层索引的办法去应对.多层数据一般长这个样子 可以看到AB两大列,下面又有xy两小列. 行有abc三行,又分为onetwo两小行. 在分组聚合的时候也会产生多层索引,下面演示一下. 导入包和数据: import numpy as np import pandas as pd df=pd.read_excel('team.xlsx') 分组聚合: df.

  • MySQL数据优化-多层索引

    目录 一.多层索引 1.创建 2.设置索引的名称 3.from_arrays( )-from_tuples() 4.笛卡儿积方式 二.多层索引操作 1.Series 2.DataFrame 3.交换索引 4.索引排序 5.索引堆叠 6.取消堆叠 一.多层索引 1.创建 环境:Jupyter import numpy as np import pandas as pd a=pd.DataFrame(np.random.random(size=(4,4)),index=[['上半年','上半年','

  • 对pandas的层次索引与取值的新方法详解

    1.层次索引 1.1 定义 在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引. 通过层次化索引,pandas能够以较低维度形式处理高纬度的数据 通过层次化索引,可以按照层次统计数据 层次索引包括Series层次索引和DataFrame层次索引 1.2 Series的层次索引 import numpy as np import pandas as pd s1 = pd.Series(data=[99, 80, 76, 80, 99], index=[['2017', '2017',

  • Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并

    1. 简介 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.最主要的数据结构是ndarray数组. NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab. SciPy 是一个开源的 Python 算法库和数学工具包.SciPy 包含的模块有最优化.线性代数.积分.插值.特殊函数.快速傅里叶变换

  • 关于Python 列表的索引取值问题

    目录 列表的索引取值 1. 列表的索引 2. 列表索引取值 3. 列表的正索引取值 4. 列表的负索引取值 5. 用列表本身取值 6. 从嵌套列表中取值 7. 课后练习 8. 总结 列表的索引取值 1. 列表的索引 和字符串一样,列表中的每一个元素也都有一个属于自己的编号,这个编号就是列表的索引. 2. 列表索引取值 通过字符串索引,我们可以取出字符串中的元素. 通过列表索引,我们可以取出列表的元素. [语法] 列表名或者列表本身. 英文中括号. 索引. 3. 列表的正索引取值 # 新建一个st

随机推荐