iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Pandas的MultiIndex多层索引使用说明
  • 590
分享到

Pandas的MultiIndex多层索引使用说明

2024-04-02 19:04:59 590人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录MultiIndex多层索引1.创建方式1.1.第一种:多维数组1.2.第二种:MultiIndex2.多层索引操作2.1.Series多层索引2.2.DataFrame多层索引

MultiIndex多层索引

MultiIndex,即具有多个层次的索引,有些类似于根据索引进行分组的形式。通过多层次索引,我们就可以使用高层次的索引,来操作整个索引组的数据。通过给索引分类分组,则可以操作组数据。

1.创建方式

1.1.第一种:多维数组

我们在创建Series或DataFrame时,可以通过给index(columns)参数传递多维数组,进而构建多维索引。

【数组中每个维度对应位置的元素,组成每个索引值】

多维索引也可以设置名称(name性),属性的值为一维数组,元素的个数需要与索引的层数相同(每层索引都需要具有一个名称)。

1.2.第二种:MultiIndex

我们可以通过MultiIndex类的相关方法,预先创建一个MultiIndex对象,然后作为Series与DataFrame中的index(或columns)参数值。同时,可以通过names参数指定多层索引的名称。

  • from_arrays:接收一个多维数组参数,高维指定高层索引,低维指定底层索引。
  • from_tuples:接收一个元组的列表,每个元组指定每个索引(高维索引,低维索引)。
  • from_product:接收一个可迭代对象的列表,根据多个可迭代对象元素的笛卡尔积进行创建索引。

from_product相对于前两个方法而言,实现相对简单,但是,也存在局限。

1.3.创建案例:


import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')

#通过给index(columns)参数传递多维数组,进而构建多维索引
# 多层索引,指定一个多维数组。多维数组中,逐级给出每层索引的值。
s = pd.Series([1, 2, 3, 4], index=[["A", "A", "B", "B"], ["a", "b", "c", "d"]])
# 多于多层索引,每一层都具有一个名字。
s.index.names = ["index1", "index2"]
display(s)
display(s.loc["A"].loc["a"])


df=pd.DataFrame(np.arange(9).reshape(3, 3), columns=[["X", "X", "Y"], ["x1", 'x2', 'y1']],index=[["A", "B", "B"], ["a", 'a', 'b']])
display(df)
display(df.loc["B"]) 
display(df["X"])
display(df.loc["B"].loc["a"]["X"]["x1"])


#通过MultiIndex类的方法进行创建。
# 通过列表的方式进行创建。(每个内嵌列表元素指定层次的索引,[[第0层索引], [第1层索引],……[第n层索引]])
array1=pd.MultiIndex.from_arrays([["A","A","B"],["a","b","a"]])
df=pd.DataFrame(np.random.rand(3,3),index=array1)
display(df)
# 通过元组构成列表的方式进行创建。[(高层,底层), (高层, 底层), ……]
tuple1 = pd.MultiIndex.from_tuples([("A", "a"), ("A", "b"), ("B", "a")])
df2 = pd.DataFrame(np.random.random((3, 3)), index=tuple1)
display(df2)
# 通过乘积(笛卡尔积)的方式进行创建。
product1 = pd.MultiIndex.from_product([["A", "B"], ["a", "b"]])
df3 = pd.DataFrame(np.random.random((4, 3)), index=product1)
display(df3)

2.多层索引操作

对于多层索引,同样也支持单层索引的相关操作,例如,索引元素,切片,索引数组选择元素等。我们也可以根据多级索引,按层次逐级选择元素。

多层索引的优势:通过创建多层索引,我们就可以使用高层次的索引,来操作整个索引组的数据。格式:

  • s[操作]
  • s.loc[操作]
  • s.iloc[操作]

其中,操作可以是索引,切片,数组索引,布尔索引。

2.1.Series多层索引

  • 通过loc(标签索引)操作,可以通过多层索引,获取该索引所对应的一组值。
  • 通过iloc(位置索引)操作,会获取对应位置的元素值(与是否多层索引无关)。
  • 通过s[操作]的行为有些诡异,建议不用。
    • 对于索引(单级),首先按照标签选择,如果标签不存在,则按照位置选择。
    • 对于多级索引,则按照标签进行选择。
    • 对于切片,如果提供的是整数,则按照位置选择,否则按照标签选择。
    • 对于数组索引, 如果数组元素都是整数,则根据位置进行索引,否则,根据标签进行索引。

2.2.DataFrame多层索引

  • 通过loc(标签索引)操作,可以通过多层索引,获取该索引所对应的一组值。
  • 通过iloc(位置索引)操作,会获取对应位置的一行(与是否多层索引无关)。
  • 通过s[操作]的行为有些诡异,建议不用。
    • 对于索引,根据标签获取相应的列(如果是多层索引,则可以获得多列)。
    • 对于数组索引, 根据标签,获取相应的列(如果是多层索引,则可以获得多列)。
    • 对于切片,首先按照标签进行索引,然后再按照位置进行索引(取行)。

2.3.交换索引


df.swaplevel(i=-2, j=-1, axis=0)

我们可以调用DataFrame对象的swaplevel方法来交换两个层级索引。该方法默认对倒数第2层与倒数第1层进行交换。我们也可以指定交换的层。层次从0开始,由外向内递增(或者由上到下递增),也可以指定负值,负值表示倒数第n层。除此之外,我们也可以使用层次索引的名称来进行交换。


df = pd.DataFrame(np.random.rand(4, 4), index=[["A", "A", "B", "B"], ["a1", "a1", "b1", "c1"], ["a2", "b2", "c2", "c2"]])
df.index.names = ["layer1", "layer2", "layer3"]
display(df)
# 多层索引,编号从外向内,0, 1, 2, 3.同时,索引编号也支持负值。
# 负值表示从内向外,-1, -2, -3. -1表示最内层。
display(df.swaplevel())  #默认对倒数第2层与倒数第1层进行交换
display(df.swaplevel(0, 2))
# 交换多层索引时,我们除了可以指定层次的编号外,也可以指定索引层次的名称。
display(df.swaplevel("layer1", "layer3"))

2.4.索引排序

我们可以使用sort_index方法对索引进行排序处理。


Signature: df.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)
  • level:指定根据哪一层进行排序,默认为最外(上)层。该值可以是数值,索引名,或者是由二者构成的列表。
  • inplace:是否就地修改。默认为False。

display(df.sort_index())  #默认索引排序
# 自定义排序的层次。
display(df.sort_index(level=1))
display(df.sort_index(level=2))
# 也可以通过索引的名称进行排序。
display(df.sort_index(level="layer1"))
display(df.sort_index(level="layer2"))

2.5.索引堆叠

通过DataFrame对象的stack方法,可以进行索引堆叠,即将指定层级的列转换成行。

  • level:指定转换的层级,默认为-1。

# 进行堆叠  列->行      取消堆叠   行->列
df.stack()                     df.unstack()

2.6.取消堆叠

通过DataFrame对象的unstack方法,可以取消索引堆叠,即将指定层级的行转换成列。 level:指定转换的层级,默认为-1。 fill_value:指定填充值。默认为NaN。


df = pd.DataFrame(np.random.rand(4, 4), index=[["A", "B", "B", "A"], ["b", "b", "a", "c"], ["b2", "c2", "a2", "c2"]])
df.index.names = ["layer1", "layer2", "layer3"]
display(df)


# 取消堆叠,如果没有匹配的数据,则显示空值NaN。
display(df.unstack())


# 我们可以指定值去填充NaN(空值)。
df.unstack(fill_value=11)


# unstack默认会将最内层取消堆叠,我们也可以自行来指定层次。
display(df.unstack(0))


# 进行堆叠  列->行      取消堆叠   行->列
df.stack()              # df.unstack()
# stack堆叠也可以指定层次。
# stack堆叠也可以通过索引名进行操作。
df.stack(0)

2.7.设置索引

在DataFrame中,如果我们需要将现有的某一(几)列作为索引列,可以调用set_index方法来实现。

  • Signature: df.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
  • drop:是否丢弃作为新索引的列,默认为True。
  • append:是否以追加的方式设置索引,默认为False。
  • inplace:是否就地修改,默认为False。

df = pd.DataFrame({"pk":[1, 2, 3, 4], "age":[15, 20, 17, 8], "name":["n1", "n2", "n3", "n4"]})
display(df)
df1 = df.set_index("pk", drop=False)
display(df1)

2.8.重置索引

调用在DataFrame对象的reset_index,可以重置索引。该操作与set_index正好相反。

  • Signature: df.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
  • level:重置索引的层级,默认重置所有层级的索引。如果重置所有索引,将会创建默认整数序列索引。
  • drop:是否丢弃重置的索引列,默认为False。
  • inplace:是否就地修改,默认为False。

df = pd.DataFrame({"pk":[1, 2, 3, 4], "age":[15, 20, 17, 8], "name":["n1", "n2", "n3", "n4"]})
#display(df)
df1 = df.set_index("pk", drop=False)
#display(df1)
df2 = df1.reset_index(0, drop=True)
display(df2)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Pandas的MultiIndex多层索引使用说明

本文链接: https://www.lsjlt.com/news/136188.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Pandas的MultiIndex多层索引使用说明
    目录MultiIndex多层索引1.创建方式1.1.第一种:多维数组1.2.第二种:MultiIndex2.多层索引操作2.1.Series多层索引2.2.DataFrame多层索引...
    99+
    2024-04-02
  • python pandas创建多层索引MultiIndex的6种方式
    目录引言pd.MultiIndex.from_arrays()pd.MultiIndex.from_tuples()列表和元组是可以混合使用的pd.MultiIndex.from_p...
    99+
    2024-04-02
  • pandas---Series与DataFrame索引、切片;多层索引、索引的堆叠
    1. Series的索引和切片 1.1 Series的索引: 可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时 返回的仍然是一个Series类型)。分为显示索引和隐式索引: (1) 显式索引: 使用in...
    99+
    2023-09-09
    pandas python numpy
  • Pandas数据分析-pandas数据框的多层索引
    目录前言创建多层索引 多层索引操作 索引名称的查看 索引的层级 索引内容的查看数据查询 数据分组前言 pandas数据框针对高维数据...
    99+
    2024-04-02
  • mysql索引合并的说明和使用
    本篇内容介绍了“mysql索引合并的说明和使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是索引合并...
    99+
    2024-04-02
  • 怎么创建一个pandas多层索引
    这篇文章将为大家详细讲解有关怎么创建一个pandas多层索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。多层索引的创建普通-多个index创建在创建数据的时候加入一个index列表,这个i...
    99+
    2023-06-07
  • Python学习教程:用Pandas做多层级索引难吗?
    有的伙伴想学用Pandas做多层级索引,但不知道从何学起,难度肯定会有的,还是得掌握方法的!Pandas库的名字来源于其中3种主要数据结构开头字母的缩写:Panel,Dataframe,Series。其中Series表示一维数据,Dataf...
    99+
    2023-06-02
  • 怎么使用Python的Pandas布尔索引
    这篇文章主要讲解了“怎么使用Python的Pandas布尔索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python的Pandas布尔索引”吧!计算布尔值统计信息import&n...
    99+
    2023-06-02
  • MySQL之存储引擎使用及说明
    目录一、mysql存储引擎概述1.1 存储引擎1.2 mysql支持的存储引擎二、各种存储引擎的特性三、各种搜索引擎介绍四、存储引擎相关sql语句五、mysql的工作流程总结一、my...
    99+
    2023-02-10
    MySQL存储引擎 存储引擎 MySQL存储
  • RCMD的使用说明
    这篇文章主要介绍“RCMD的使用说明”,在日常操作中,相信很多人在RCMD的使用说明问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RCMD的使用说明”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!*****...
    99+
    2023-06-08
  • Pandas reindex重置索引如何使用
    这篇文章主要介绍了Pandas reindex重置索引如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pandas reindex重置索引如何使用文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-02
  • 使用pandas忽略行列索引,纵向拼接多个dataframe
    从wind上面搞到一批股票数据后发现:本来是一个类型的数据,但是由于季度不同,列名也不同,导致使用pandas合并多个报表的时候总是出现一大堆NaN,所以这里我写了一个函数,专门针对...
    99+
    2024-04-02
  • mysql8.0JSON_CONTAINS的使用说明
    目录JSON_CONTAINS的使用语法案例JSON_CONTAINS函数问题结构如下JSON_CONTAINS的使用 语法 JSON_CONTAINS(json_doc, val[...
    99+
    2024-04-02
  • 计算多索引 pandas 数据帧外部索引每行的总和
    问题内容 我有一个数据框:seller、item、price、shipping、免费送货最低、count available和count required。我的目标是根据稍后计算的 t...
    99+
    2024-02-05
  • springBoot controller,service,dao,mapper,model层的作用说明
    目录零、业务逻辑一、Dao(Data Access Object):数据存储对象二、Service:服务三、Controller:控制器四、model:模型五、View层六、它们之间...
    99+
    2024-04-02
  • 使用pandas怎么输出每行的索引值
    本篇文章为大家展示了使用pandas怎么输出每行的索引值,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。输出结果name      objectID&...
    99+
    2023-06-14
  • java ImmutableMap的使用说明
    ImmutableMap:一个不可变集合 java中的Immutable对象: 简单地说,如果一个对象实例不能被更改就是一个Immutable的对象,Java SDK提供的大量值对象...
    99+
    2024-04-02
  • ORACLE event的使用说明
    这篇文章给大家介绍ORACLE event的使用说明,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。eventEvent Reference 10013 - Monitor Transaction Recovery102...
    99+
    2023-06-06
  • Pytorch BertModel的使用说明
    基本介绍 环境: Python 3.5+, Pytorch 0.4.1/1.0.0 安装: pip install pytorch-pretrained-bert 必需参数: ...
    99+
    2024-04-02
  • Spring中Bean的单例和多例使用说明
    目录Bean的单例和多例使用实战演示Spring单例bean与原型bean区别和创建过程singletonScope与prototypeScopeBean的单例和多例使用 在Spri...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作