Pandas-层次化索引
全文共401字,预计阅读时间5分钟。
层次化索引是pandas的一项重要功能,它能使你在一个轴上有多个索引级别,也就是说,它能使你以低维度形式处理高维度数据,比如下面的代码:
data = pd.Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c','d','d'],[1,2,3,1,2,3,1,2,2,3]])
data#输出
a 1 0.4979702 -0.0423773 -0.018719b 1 0.0614122 -1.3138883 0.751478c 1 -0.2413292 -1.945047d 2 0.4607863 -0.411931dtype: float64data.index#输出MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])
有了层次化索引之后,我们很容易的访问分块数据:
data['b']#输出1 0.0614122 -1.3138883 0.751478dtype: float64data[:,2]#输出a -0.042377b -1.313888c -1.945047d 0.460786dtype: float64
层次化索引在数据重塑和基于分组的操作中扮演重要的角色。比如,上面的数据可以使用unstack方法重塑成为一个DataFrame:
data.unstack()#输出1 2 3a 0.497970 -0.042377 -0.018719b 0.061412 -1.313888 0.751478c -0.241329 -1.945047 NaN
d NaN 0.460786 -0.411931
unstack的逆运算是stack()
data.unstack().stack()#输出a 1 0.4979702 -0.0423773 -0.018719b 1 0.0614122 -1.3138883 0.751478c 1 -0.2413292 -1.945047d 2 0.4607863 -0.411931dtype: float64
DataFrame的行列索引都可以使用层次化索引:
frame = pd.DataFrame(np.arange(12).reshape((4,3)),index=[['a','a','b','b'],[1,2,1,2]],columns=[['Ohio','Ohio','Colorado'],['Green','Red','Green']])
frame
#输出
Ohio Colorado
Green Red Greena 1 0 1 22 3 4 5b 1 6 7 82 9 10 11
我们可以创建层次化索引MulitIndex:
index = pd.MultiIndex.from_arrays([['Ohio','Ohio','Colorado'],['Green','Red','Green']],names=['state','color'])index
#输出MultiIndex(levels=[['Colorado', 'Ohio'], ['Green', 'Red']], labels=[[1, 1, 0], [0, 1, 0]], names=['state', 'color'])frame.columns=indexframe
#输出state Ohio Coloradocolor Green Red Greena 1 0 1 22 3 4 5b 1 6 7 82 9 10 11
我们可以给我们的索引赋予名字:
frame.index.names=['key1','key2']
frame
#输出
state Ohio Coloradocolor Green Red Green
key1 key2 a 1 0 1 22 3 4 5b 1 6 7 82 9 10 11
我们可以使用swaplevel交换两个索引的级别,swaplevel接受两个级别编号或者名称,并返回一个互换了级别的新对象:
frame.swaplevel('key1','key2')#输出
state Ohio Coloradocolor Green Red Green
key2 key1 1 a 0 1 22 a 3 4 51 b 6 7 82 b 9 10 11
使用层次化索引时,sort_index中的level指定了根据哪个索引级别进行排序,sum等汇总统计函数中的level参数指定了根据哪个索引级别进行汇总统计:
frame.sort_index(level = 0)frame.sum(level='key2')frame.sum(level='color',axis=1)
原文链接:https://mp.weixin.qq.com/s?__biz=MzI1MzY0MzE4Mg==&mid=2247483787&idx=2&sn=6667a9cf3a5809d9aab5efb9e209dc7d&chksm=e9d0114adea7985cc41bb218a46d368ff243ad72188da83c22ead3962d5ebcd524b8ac62cba0&scene=21#wechat_redirect
查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:
www.leadai.org
请关注人工智能LeadAI公众号,查看更多专业文章
大家都在看
LSTM模型在问答系统中的应用
基于TensorFlow的神经网络解决用户流失概览问题
最全常见算法工程师面试题目整理(一)
最全常见算法工程师面试题目整理(二)
TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络
装饰器 | Python高级编程
今天不如来复习下Python基础
Pandas-层次化索引相关推荐
- Pandas 基础 (5) —— 处理缺失数据及层次化索引
处理缺失数据 pandas 使用浮点值 NaN (Not a Number)表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测出来的标记而已. In [168]: data = Series([' ...
- Pandas对象的层次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】
文章目录 层次化索引的概念 层次化索引的创建 使用嵌套列表的方式构造层次化索引对象 Series对象 DataFrame对象 通过MultiIndex类的方法构建层次化索引 通过from_tuples ...
- 数据分析之pandas学习笔记(六)(层次化索引、重塑、轴向旋转、行列变换、合并表数据)
数据分析之Pandas学习笔记(六)(层次化索引.重塑.轴向旋转.行列变换.合并表数据) level层次化索引 unstack()与stack()进行重塑,即:行列索引变换 swaplevel()交换 ...
- pandas mysql index_Pandas从入门到精通(3)- Pandas多级索引MultiIndex
首先了解一下什么是多级索引,以及它的作用,为什么要有这个玩意. 多级索引也称为层次化索引(hierarchical indexing),是指数据在一个轴上(行或者列)拥有多个(两个以上)索引级别.之所 ...
- 数据分析索引总结(中)Pandas多级索引
Datawhale干货 作者:闫钟峰,Datawhale优秀学习者 寄语:本文介绍了创建多级索引.多层索引切片.多层索引中的slice对象.索引层的交换等内容. 创建多级索引 1. 通过from_tu ...
- 数据分析工具Pandas(2):Pandas的索引操作
数据分析工具Pandas(1):Pandas的数据结构 数据分析工具Pandas(2):Pandas的索引操作 Pandas的索引操作 索引对象Index 1. Series和DataFrame中的索 ...
- pandas分层索引(层级索引、MultiIndex)的创建、取值、切片、统计计算以及普通索引和层级索引的转换方法
pandas分层索引(层级索引.MultiIndex)的创建.取值.切片.统计计算以及普通索引和层级索引的转换方法 @TOC 多层索引的Series 层级索引的创建 层级索引(multi index) ...
- pandas数据索引之loc、iloc、ix详解及实例
pandas数据索引之loc.iloc.ix详解及实例 先来个总结: loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为&quo ...
- Pandas简明教程:四、Pandas数据索引方式
文章目录 1.以类似`dict`的方式访问 2.以属性方式访问数据 3.访问行(slicing) 4.用`loc`方法访问不同行列 5.用`iloc`方法直接访问行列 6.其它方式 本系列教程教程完整 ...
- pandas把索引变成列
pandas把索引变成列,只需要使用reset_index.这样index就会变成一列变量出现在元数据表中. 比如原来的数据表是上面这样, 使用reset_index 就变成这样 具体reset_in ...
最新文章
- 【C++】引用与变量
- oracle查看临时表空间文件,Oracle-临时表空间
- 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...
- python装饰器副作用_对Python 装饰器的理解心得
- ORACLE 表类型 OLTP和OLAP
- linux下devel包的作用
- mysql精讲_Mysql 索引精讲
- setjmp.h(c标准库)
- python图像对比_python+PIL实现图片对比(一)
- Spring-Bean配置-使用外部属性文件(转)
- 广东省30m二级分类土地利用数据(矢量)
- 启动vpn报网络扩展错误(问题篇)
- Mac安装 Navicat
- 线路板板SMT贴片中二极管正负极区分方法
- 手机邮箱中的邮件里的链接的打开方式/app更改方法
- Revit:一般建筑的主要结构汇总和构建参数化族方法
- laravel-jwt attempt()异常问题处理
- Fabric实战(四)-多机部署fabric网络-solo
- 《国民经济行业分类》(《国民经济行业分类》)
- Vue锚链接(两种方法) scrollIntoView
热门文章
- python字符串大全_Python 字符串操作方法大全
- pythonfor循环输入_Python之for循环的使用
- 【windows】windows允许 ICMP协议(允许ping)
- 微信公众号服务器模式,微信公众平台的两种模式
- usr bin java快捷方式_/ usr / bin / sudo必须由uid 0拥有并设置setuid位
- oracle sql的应用场景,oracle 3个适用sql场景
- 高校表白app使用体验
- SCUT - 299 - Kaildls的数组划分 - dp - 高精
- [LeetCode] 234. Palindrome Linked List_Easy tag: Linked List
- Java并发编程-ReentrantLock