pandas基础--层次化索引
pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的。
本章节的代码引入pandas约定为:import pandas as pd,另外import numpy as np也会用到。
官方介绍:pandas - Python Data Analysis Library (pydata.org)
8 层次化索引
层次化索引使你能在一个轴上拥有多个(两个以上)索引级别。抽象的说,它使你能以低维度形式处理高维度数据。
1 >>> 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]])
2 >>> data
3 a 1 3.230188
4 2 0.596511
5 3 0.956307
6 b 1 1.132221
7 2 0.746174
8 3 0.470007
9 c 1 0.880883
10 2 0.757047
11 d 2 -0.028331
12 3 0.382625
13 dtype: float64
14 >>> data.index #带MultiIndex索引的Series的格式化输出形式,索引之间的“间隔”表示“直接使用上面的标签”
15 MultiIndex([('a', 1),
16 ('a', 2),
17 ('a', 3),
18 ('b', 1),
19 ('b', 2),
20 ('b', 3),
21 ('c', 1),
22 ('c', 2),
23 ('d', 2),
24 ('d', 3)],
25 )
26 >>> data['b'] #选取数据子集
27 1 1.132221
28 2 0.746174
29 3 0.470007
30 dtype: float64
31 >>> data['b': 'c']
32 b 1 1.132221
33 2 0.746174
34 3 0.470007
35 c 1 0.880883
36 2 0.757047
37 dtype: float64
38 >>> data.loc[['b', 'd']]
39 b 1 1.132221
40 2 0.746174
41 3 0.470007
42 d 2 -0.028331
43 3 0.382625
44 dtype: float64
45 >>> data[:, 2] #在“内层”中进行选取
46 a 0.596511
47 b 0.746174
48 c 0.757047
49 d -0.028331
50 dtype: float64
层次索引在数据重塑和基于和基于分组的操作(如透视表生成)中有重要作用。
如可以通过unstack方法重新安排多层数据到一个DataFrame中。
官方说明:pandas.DataFrame.unstack — pandas 1.3.4 documentation (pydata.org)
1 >>> data
2 a 1 3.230188
3 2 0.596511
4 3 0.956307
5 b 1 1.132221
6 2 0.746174
7 3 0.470007
8 c 1 0.880883
9 2 0.757047
10 d 2 -0.028331
11 3 0.382625
12 dtype: float64
13 >>> data.unstack()
14 1 2 3
15 a 3.230188 0.596511 0.956307
16 b 1.132221 0.746174 0.470007
17 c 0.880883 0.757047 NaN
18 d NaN -0.028331 0.382625
19 >>> data.unstack().stack() #stack使unstack的逆运算
20 a 1 3.230188
21 2 0.596511
22 3 0.956307
23 b 1 1.132221
24 2 0.746174
25 3 0.470007
26 c 1 0.880883
27 2 0.757047
28 d 2 -0.028331
29 3 0.382625
30 dtype: float64
对于一个DataFrame,每条轴都可以分成索引,每层都可以由名字(可能是字符串,也可以是别的python对象)。如果指定了名字,它们就会显示在控制台输出中。
1 >>> frame = pd.DataFrame(np.arange(12).reshape((4, 3)), index=[['a', 'a', 'b', 'b'], [1, 2, 1, -2]], columns=[['Oh', 'Oh', 'Co'], ['Gr', 'Re', 'Gr']])
3 >>> frame
4 Oh Co
5 Gr Re Gr
6 a 1 0 1 2
7 2 3 4 5
8 b 1 6 7 8
9 -2 9 10 11
10 >>> frame.index.names = ['key1', 'key2']
11 >>> frame.columns.names = ['state', 'color']
12 >>> frame
13 state Oh Co
14 color Gr Re Gr
15 key1 key2
16 a 1 0 1 2
17 2 3 4 5
18 b 1 6 7 8
19 -2 9 10 11
20 >>> frame['Oh']
21 color Gr Re
22 key1 key2
23 a 1 0 1
24 2 3 4
25 b 1 6 7
26 -2 9 10
8.1 重排分级排序
有时需要调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。
swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(当数据不会发生变化)。
官方文档:pandas.DataFrame.swaplevel — pandas 1.3.4 documentation (pydata.org)
1 >>> frame
2 state Oh Co
3 color Gr Re Gr
4 key1 key2
5 a 1 0 1 2
6 2 3 4 5
7 b 1 6 7 8
8 -2 9 10 11
9 >>> frame.swaplevel('key1', 'key2')
10 state Oh Co
11 color Gr Re Gr
12 key2 key1
13 1 a 0 1 2
14 2 a 3 4 5
15 1 b 6 7 8
16 -2 b 9 10 11
8.2 根据级别汇总统计
许多对DataFrame和Series的描述和汇总统计都有一个level选项,用于指定在某条轴上求和的级别。
1 >>> frame
2 state Oh Co
3 color Gr Re Gr
4 key1 key2
5 a 1 0 1 2
6 2 3 4 5
7 b 1 6 7 8
8 -2 9 10 11
9 >>> frame.sum(level='key2')
10 state Oh Co
11 color Gr Re Gr
12 key2
13 1 6 8 10
14 2 3 4 5
15 -2 9 10 11
16 >>> frame.sum(level='color', axis=1)
17 color Gr Re
18 key1 key2
19 a 1 2 1
20 2 8 4
21 b 1 14 7
22 -2 20 10
23 >>>
8.3 使用DataFrame的列
经常将DataFrame的一个或多个列当作行索引来使用,或者希望将行索引变成DataFrame的列。
DataFrame的set_index函数会将其一个或多个列转换为行索引,并创建一个新的DataFrame。
1 >>> frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0, 1, 2, 0, 1, 2, 3]})
2 >>> frame
3 a b c d
4 0 0 7 one 0
5 1 1 6 one 1
6 2 2 5 one 2
7 3 3 4 two 0
8 4 4 3 two 1
9 5 5 2 two 2
10 6 6 1 two 3
11 >>> frame2 = frame.set_index(['c', 'd'])
12 >>> frame2
13 a b
14 c d
15 one 0 0 7
16 1 1 6
17 2 2 5
18 two 0 3 4
19 1 4 3
20 2 5 2
21 3 6 1
22 >>> frame.set_index(['c', 'd'], drop=False) #可选择保留那些列
23 a b c d
24 c d
25 one 0 0 7 one 0
26 1 1 6 one 1
27 2 2 5 one 2
28 two 0 3 4 two 0
29 1 4 3 two 1
30 2 5 2 two 2
31 3 6 1 two 3
reset_index的功能和set_index刚好相反、层次化索引的级别会被转移到列里面:
1 >>> frame2
2 a b
3 c d
4 one 0 0 7
5 1 1 6
6 2 2 5
7 two 0 3 4
8 1 4 3
9 2 5 2
10 3 6 1
11 >>> frame2.reset_index()
12 c d a b
13 0 one 0 0 7
14 1 one 1 1 6
15 2 one 2 2 5
16 3 two 0 3 4
17 4 two 1 4 3
18 5 two 2 5 2
19 6 two 3 6 1
pandas基础--层次化索引的更多相关文章
- 利用Python进行数据分析(11) pandas基础: 层次化索引
层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引S ...
- pandas中层次化索引与切片
Pandas层次化索引 1. 创建多层索引 隐式索引: 常见的方式是给dataframe构造函数的index参数传递两个或是多个数组 Series也可以创建多层索引 Series多层索引 B =Ser ...
- pandas基础用法——索引
# -*- coding: utf-8 -*- # Time : 2016/11/28 15:14 # Author : XiaoDeng # version : python3.5 # Softwa ...
- Pandas基本功能之层次化索引及层次化汇总
层次化索引 层次化也就是在一个轴上拥有多个索引级别 Series的层次化索引 data=Series(np.random.randn(10),index=[ ['a','a','a','b','b', ...
- pandas:由列层次化索引延伸的一些思考
1. 删除列层次化索引 用pandas利用df.groupby.agg() 做聚合运算时遇到一个问题:产生了列方向上的两级索引,且需要删除一级索引.具体代码如下: # 每个uesr每天消费金额统计:和 ...
- pandas(五)处理缺失数据和层次化索引
pandas用浮点值Nan表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测的标记而已. >>> string_data = Series(['aardvark','artich ...
- (三)pandas 层次化索引
pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...
- Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识
第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 ...
- 利用Python进行数据分析(12) pandas基础: 数据合并
pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
随机推荐
- sass的用法重温
Sass使用变量,变量以$开头 $bgcolor:#f40; background-color:$bgcolor; 如果变量需要嵌套在字符串当中,就需要写在#{}之中 $direction:left; ...
- bs4、selenium的使用
爬取新闻 # 1 爬取网页---requests # 2 解析 ---xml格式,用了re匹配的 ---html,bs4,lxml... ---json: -python :内置的 -java : f ...
- Docker 安装,常用命令
安装Docker 官方所有操作系统安装教程:Install Docker Engine on CentOS | Docker Documentation,其中CentOS安装docker引擎的代码: ...
- 深入解读:获得 2021 Forrester 全球云数仓卓越表现者的阿里云数据仓库
简介: 阿里云在最新发布的 The Forrester Wave: Cloud Data Warehouse, Q1 2021 全球云数据仓库技术评比中进入卓越表现者象限,成为国内唯一入选厂商.本文针 ...
- 005_Orcad里创建Homogeneous分裂元件
005_Orcad里创建Homogeneous分裂元件 两种类型Homogeneous和Hetergeneous的区别,都是用来把一个复杂的元件分成多个部分来画,不同的是homogeneous画的每部 ...
- SqlServer2008R2 在开始菜单中找不到配置管理器
直接找到C:\Windows\SysWOW64\SQLServerManager10.msc,打开即可.
- validator库在gin中的使用
目录 封装语言包翻译器 tag中设置验证规则 控制层验 curl请求 返回结果 封装语言包翻译器 package validator import ( "fmt" "ne ...
- CSS自适应网页(CSS第一篇)
CSS的属性: 用浏览器自带的审查元素对一些页面进行调整,快捷键是F12. 网页允许宽度自适应: 在代码的头部加入一行viewport元标签. <meta name="viewpor ...
- 纯JS实现多张图片无缝滚动和多张图片上下滚动的效果--JavaScript实例集锦(初学)
我们会看到很多的网站上会使用多张图片无缝滚动的效果. 下面我就介绍几种纯JS实现多张图片的无缝滚动,并实现鼠标移到图片上运动停止的效果,可以控制图片左右滚动.1.效果展示: 代码实现: <!DO ...
- VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?
看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...