Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】
文章目录
- 层次化索引的概念
- 层次化索引的创建
- 使用嵌套列表的方式构造层次化索引对象
- Series对象
- DataFrame对象
- 通过MultiIndex类的方法构建层次化索引
- 通过from_tuples()方法创建MultiIndex对象
- 通过from_arrays()方法创建MultiIndex对象
- 通过from_product()方法创建MultiIndex对象
- 层次化索引的操作
- 选取子集
- 获取外层索引子集
- 获取内层索引子集
- 交换分层顺序——swaplevel()
- 排序分层
- sort_index()
- sort_values()
层次化索引的概念
只有一层索引结构(行索引、列索引)的Pandas对象称为单层索引,层次化索引可以理解为单层索引的延申,即在一个轴方向上具有多层索引。
层次化索引的创建
使用嵌套列表的方式构造层次化索引对象
Series对象
使用构造方法创造Series对象时,index参数接收了一个嵌套列表来设置索引的层级。
嵌套的第一个列表会作为外层索引,第二个列表会作为内层索引。
import pandas as pd
import numpy as npse = pd.Series([1, 2, 3, 4, 5, 6, 7, 8],index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家庄', '唐山', '邯郸', '秦皇岛', '郑州', '开封', '洛阳', '新乡']])
print(se)
输出结果:
河北省 石家庄 1唐山 2邯郸 3秦皇岛 4
河南省 郑州 5开封 6洛阳 7新乡 8
dtype: int64
DataFrame对象
嵌套函数中两个列表的长度必须是保持一致的,否则将会出现ValueError错误。
df = DataFrame([1, 2, 3, 4, 5, 6, 7, 8],index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家庄', '唐山', '邯郸', '秦皇岛', '郑州', '开封', '洛阳', '新乡']],columns=['占地面积'])
print(df)
df1 = DataFrame({'占地面积': [1, 2, 3, 4, 5, 6, 7, 8]},index=[['河北省', '河北省', '河北省', '河北省','河南省', '河南省', '河南省', '河南省'],['石家庄', '唐山', '邯郸', '秦皇岛', '郑州', '开封', '洛阳', '新乡']])
print(df1)
输出结果: 两种方式的输出结果是一致的
占地面积
河北省 石家庄 1唐山 2邯郸 3秦皇岛 4
河南省 郑州 5开封 6洛阳 7新乡 8占地面积
河北省 石家庄 1唐山 2邯郸 3秦皇岛 4
河南省 郑州 5开封 6洛阳 7新乡 8
通过MultiIndex类的方法构建层次化索引
除了使用嵌套列表的方式构造层次化索引以外,还可以通过MultiIndex类的方法构建一个层次化索引。
MultiIndex类提供了3种创建层次化索引的方法。
MultiIndex.from_tuples():将元组列表转换为MultiIndex。
MultiIndex.from_arrays():将数组列表转换为MultiIndex。
MultiIndex.from_product():从多个集合的笛卡尔乘积种创建一个MultiIndex。
MultiIndex类对象种有三个比较重要的属性
levels : 表示每个级别的唯一标签
labels : 表示每一个索引列种每个元素在levels中对应的第几个元素
names :设置索引等级名称
通过from_tuples()方法创建MultiIndex对象
from_tuples()方法可以将包含若干个元组的列表转换为MultiIndex对象,其中元组的第一个元素作为外层索引,元组的第二个元素作为内层索引。
from pandas import MultiIndexlist_tuples = [('A', 'A1'), ('A', 'A2'), ('A', 'A3'), ('B', 'B1'), ('B', 'B2')]
# 创建包含多个元组的列表
multi_tuple = MultiIndex.from_tuples(tuples=list_tuples, names=['外层索引', '内层索引'])
# 根据元组列表创建一个MultiIndex对象
print(multi_tuple)
输出结果:
MultiIndex([('A', 'A1'),('A', 'A2'),('A', 'A3'),('B', 'B1'),('B', 'B2')],names=['外层索引', '内层索引'])
接下来,创建一个DataFrame对象,把刚创建的创建的multi_tuple传递给index参数。
import pandas as pdvalue = [[1, 2, 3], [8, 5, 7], [4, 7, 7], [5, 5, 4], [4, 9, 9]]
df_tuple = pd.DataFrame(data=value, index=multi_tuple)
print(df_tuple)
输出结果:
外层索引 内层索引
A A1 1 2 3A2 8 5 7A3 4 7 7
B B1 5 5 4B2 4 9 9
通过from_arrays()方法创建MultiIndex对象
from_arrays()方法是将数组列表转换为MultiIndex对象,其中嵌套的第一个列表将作为外层索引,嵌套的第二个列表将作为内层索引。
from pandas import MultiIndexmulti_array = MultiIndex.from_arrays(arrays=[['A', 'B', 'A', 'B', 'B'],['A1', 'A2', 'B1', 'B2', 'B3']],names=['外层索引', '内层索引'])
# 根据列表创建一个MultiIndex对象
print(multi_array)
输出结果:
MultiIndex([('A', 'A1'),('B', 'A2'),('A', 'B1'),('B', 'B2'),('B', 'B3')],names=['外层索引', '内层索引'])
参数arrays既可以接收列表,也可以接受数组,不过每个列表或者数组的长度必须是相同的。
接下来,创建一个DataFrame对象,把刚刚创建的multi_array传递给index参数。
import pandas as pd
import numpy as npvalue1 = np.arange(10).reshape(5, 2)
df_array = pd.DataFrame(data=value1, index=multi_array)
print(df_array)
输出结果:
0 1
外层索引 内层索引
A A1 0 1
B A2 2 3
A B1 4 5
B B2 6 7B3 8 9
通过from_product()方法创建MultiIndex对象
from_product()方法表示从多个集合的笛卡尔积中创建一个MultiIndex对象。
number = [0, 1, 2]
colors = ['green', 'purple']
multi_product = pd.MultiIndex.from_product(iterables=[number, colors],names=['number', 'color'])
print(multi_product)
输出结果:
MultiIndex([(0, 'green'),(0, 'purple'),(1, 'green'),(1, 'purple'),(2, 'green'),(2, 'purple')],names=['number', 'color'])
接下来,创建一个DataFrame对象,把刚刚创建的multi_product传递给index参数,让该对象有两层索引结构。
value2 = np.arange(12).reshape(6, 2)
df_product = pd.DataFrame(data=value2, index=multi_product)
print(df_product)
输出结果:
0 1
number color
0 green 0 1purple 2 3
1 green 4 5purple 6 7
2 green 8 9purple 10 11
层次化索引的操作
选取子集
创建Series对象
ser_obj = Series([50, 60, 40, 94, 63, 101, 200, 56, 45],index=[['小说', '小说', '小说','散文随笔', '散文随笔', '散文随笔','传记', '传记', '传记'],['高山上的小邮局', '失踪的总统', '绿毛水怪','皮囊', '浮生六记', '自在独行','梅西', '老舍自传', '库里传']])
print(ser_obj)
输出结果:
小说 高山上的小邮局 50失踪的总统 60绿毛水怪 40
散文随笔 皮囊 94浮生六记 63自在独行 101
传记 梅西 200老舍自传 56库里传 45
dtype: int64
获取外层索引子集
例如获取所有外层索引为“小说”的子集
print(ser_obj['小说'])
输出结果:
高山上的小邮局 50
失踪的总统 60
绿毛水怪 40
dtype: int64
获取内层索引子集
例如获取内层索引为“老舍自传”的子集
print(ser_obj[:, '老舍自传'])
输出结果:
传记 56
dtype: int64
交换分层顺序——swaplevel()
交换分层顺序是指交换外层索引和内层索引的位置。
print(ser_obj.swaplevel())
输出结果:
高山上的小邮局 小说 50
失踪的总统 小说 60
绿毛水怪 小说 40
皮囊 散文随笔 94
浮生六记 散文随笔 63
自在独行 散文随笔 101
梅西 传记 200
老舍自传 传记 56
库里传 传记 45
dtype: int64
排序分层
sort_index()
sort_index(
self,
axis=0,
level=None,
ascending=True,
inplace=False,
kind=“quicksort”,
na_position=“last”,
sort_remaining=True,
ignore_index: bool = False,
)
上述方法的部分参数含义如下:
ascending: 是否升序排列,默认为True,升序排列。
在使用sort_index()方法排序时,会优先选择按外层索引进行排序,然后再按照内层索引进行排序。
创建一个DataFrame对象
df_obj = DataFrame({'word': ['a', 'b', 'd', 'e', 'f', 'k', 'd', 's', 'l'],'num':['1', '2', '4', '5', '3', '2', '6', '2', '3']},index=[['A', 'A', 'A', 'C', 'C', 'C', 'B', 'B', 'B'],[1, 3, 2, 3, 1, 2, 4, 5, 8]])
print(df_obj)
输出结果:
word num
A 1 a 13 b 22 d 4
C 3 e 51 f 32 k 2
B 4 d 65 s 28 l 3
按索引排序
print(df_obj.sort_index())
输出结果:
word num
A 1 a 12 d 43 b 2
B 4 d 65 s 28 l 3
C 1 f 32 k 23 e 5
sort_values()
sort_values(
self,
by,
axis=0,
ascending=True,
inplace=False,
kind=“quicksort”,
na_position=“last”,
ignore_index=False,
)
上述方法的部分参数含义如下:
by: 按指定的值排序,是sort_values()必须填写的参数
按照列索引num进行降序排列
print(df_obj.sort_values(by=['num'], ascending=False))
输出结果:
word num
B 4 d 6
C 3 e 5
A 2 d 4
C 1 f 3
B 8 l 3
A 3 b 2
C 2 k 2
B 5 s 2
A 1 a 1
Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】相关推荐
- 关于groupby与层次化索引的联系和层次化标签的使用
groupby出来对象并不是dataFrame,所以直接print是看不到矩阵或者高维矩阵的,所以需要用能够产生标量值的方法去处理groupby对象,这样可以利用矩阵形式处理高维数据: 这样group ...
- Pandas 基础 (5) —— 处理缺失数据及层次化索引
处理缺失数据 pandas 使用浮点值 NaN (Not a Number)表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测出来的标记而已. In [168]: data = Series([' ...
- 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)
数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...
- Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作
CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...
- 利用python进行数据分析——使用groupby机制对pandas对象类的数据进行聚合与分组操作
文章目录 数据聚合与分组操作 一.GroupBy机制 1.1遍历各分组 1.2选取一列或所有列的子集 1.3 通过字典或Series进行分组 1.4 通过函数进行分组 1.5根据索引层级分组 二. 数 ...
- pandas学习(创建多层索引、数据重塑与轴向旋转)
pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...
- python pandas dataframe 不显示索引_Python DataFrame 设置输出不显示index(索引)值的方法...
Python DataFrame 设置输出不显示index(索引)值的方法 在输出代码行中,加入"index=False"如下: m_pred_survived.to_csv(&q ...
- 【Python】快速认识Pandas的10大索引
公众号:尤而小屋 作者:Peter 编辑:Peter 今天给大家带来一篇关于Pandas索引的文章:10种你必须掌握的Pandas索引. 索引在我们的日常生活中其实是很常见的,就像: 一本书有自己的目 ...
- 数据科学 IPython 笔记本 7.4 Pandas 对象介绍
7.4 Pandas 对象介绍 原文:Introducing Pandas Objects 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Pyth ...
最新文章
- 3亿人养老靠机器人?这家公司要在2030年实现,有谱
- iis cgi 无法使用_ASP.NET Core前后端分离项目使用gitlabci持续集成到IIS
- Zookeeper .Net客户端代码
- 论文浅尝 | 一种基于递归超图的知识图谱问答方法
- 125_Power BI 中 DAX 的性能测试
- Spring的IOC机制
- opencv 指定分辨率_使用opencv拉伸图像扩大分辨率示例
- Atitit 项目管理之沟通管理概论问题管理 艾提拉著 跨语言沟通 群组沟通 书面沟通 目录 1. 沟通方式	2 1.1. 书面沟通 vs 当面沟通	2 1.2. 群组沟通(公开沟通) vs
- 关于数据库主键和外键(终于弄懂啦)
- stm32 ov2640硬件软件笔记
- 基于 USB 传输的针式打印机驱动程序开发
- MATLAB求导相关知识,matlab如何求导相关阅读-matlab如何求导文章阅读-123文学网
- iOS-AppStore上线被拒的各种理由...
- deepin15.9的linux内核版本,深度Deepin 15.9操作系统首次更新内容
- protobuf如何使用Protogen工具生成CS代码详细教学篇
- java的excel模板下载(解决中文名乱码问题)
- Python 实战案例--计算圆、矩形的周长和面积
- 魅族官方刷机教程地址(免费)
- 浅谈IT行业中的隐私泄露问题
- [BDSec CTF 2022] 部分WP
热门文章
- python源码剖析_Python源码剖析 - 对象初探
- 如何改善虚幻引擎中的游戏线程CPU性能表现
- win32 ipv6 sendto recvfrom
- java实现c语言的函数_C语言实现返回字符串函数的四种方法
- css宋体代码_html布局中统一设置文字字体样式
- 【转】dcmtk程序包综述(2)!!!!!
- 【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析
- 37职责链模式(Chain of Responsibility Pattern)
- 分布式事务解决方案框架(LCN)
- 用姓名字段统计人数_基于 Wide amp; Deep 网络和 TextCNN 的敏感字段识别