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() 获取最大值对应的索 ...
随机推荐
- vscode设置语法错误时在文件名显示报错
- 【vue】纯前端图形验证码实现
[vue]纯前端图形验证码实现 感觉人不能在SQL里面淹死,得看看别的东西了 因为是上班摸鱼偷摸搞的,所以人比较懒,很多东西也懒得修修改改,直接放在一个html文件下了 页面如下 js的生成图形逻辑是 ...
- 好云推荐官丨飞天加速之星怎样选择云服务器ECS?
编者按:本文来自"好云推荐官"活动的技术博主投稿,作者(昵称天狼)曾入选首届"飞天加速之星",获得飞天人气奖. 你是否还在苦苦地寻找一家合适的云厂商,寻找合 ...
- 21克:仅需3天,我们就用Quick BI搭建起数据驾驶舱
简介:数智化并不仅仅是大型企业才需要去思考的课题,而是摆在所有企业面前的一个可选项.借助Quick BI搭建的数据分析体系,21克实现了销售.财务.供应链等多部门业务的数据化支撑,从一份份本地化的E ...
- 解密 Dubbo 三大中心的部署架构
简介:Dubbo作为一个微服务框架,Dubbo SDK与应用服务绑定在同一个进程内,它跟随着应用服务被部署在分布式集群各个位置,为了在分布式环境下实现各个应用服务间的协作, Dubbo 定义了一些中 ...
- Apache Flink 在汽车之家的应用与实践
简介: 汽车之家如何基于 Flink 上线了 AutoStream 平台并持续打磨. 本文整理自汽车之家实时计算平台负责人邸星星在 Flink Forward Asia 2020 分享的议题< ...
- WinForms 使用 Image 的 FromFile 方法加载文件和使用 Bitmap 有什么不同
本文来告诉大家使用 GDI+ 的 Image.FromFile 加载图片文件和使用创建 Bitmap 传入图片文件有什么不同 如使用下面代码加载图片 using var image = Image.F ...
- 02 Orcad设计环境讲解与工程创建
02 Orcad设计环境讲解与工程创建 学习目标: 1) 掌握Orcad软件绘制元件库以及原理图的方法: 2) 掌握Allegro软件绘制PCB库以及PCB的方法: 3) 掌握Orca ...
- vue使用bus.js在兄弟组件传值
A组件往B组件传递数据data 1.src下创建文件eventBus.js,内容: import Vue from 'vue' export default new Vue() 2.在A,B组件分别引 ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-42-强大的可视化追踪利器Trace Viewer
1.简介 在我们日常执行自动化测试工作的过程中,经常会遇到一些偶发性的bug,但是因为bug是偶发性的,我们不一定每次执行都能复现,所以我们在测试执行的时候,追踪用例执行就变得非常重要了.playwr ...