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() 获取最大值对应的索 ...
随机推荐
- HBuilderX 连接网易mumu手机模拟器进行App开发
1.下载安装手机模拟器 常见的安卓手机模拟器: 手机模拟器名称 对应端口号 夜神模拟器 62001 天天模拟器 6555 海马玩模拟器 26944 逍遥模拟器 21503 网易mumu模拟器 7555 ...
- 顺通鞋业ERP管理系统
鞋业管理软件/鞋业管理系统/鞋业管理云平台 顺通鞋业ERP进销存系统拥有订货管理.销售管理.财务管理.产品管理.库存管理.客户管理.员工管理.查询统计等功能.顺通鞋业ERP进销存系统在管理信息系统业务 ...
- 力扣744(java&python)- 寻找比目标字母大的最小字母(简单)
题目: 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例 ...
- 网易云音乐基于 Flink + Kafka 的实时数仓建设实践
一.背景介绍 (一)流平台通用框架 目前流平台通用的架构一般来说包括消息队列.计算引擎和存储三部分,通用架构如下图所示.客户端或者 web 的 log 日志会被采集到消息队列:计算引擎实时计算消息队列 ...
- 多任务学习模型之ESMM介绍与实现
简介:本文介绍的是阿里巴巴团队发表在 SIGIR'2018 的论文<Entire Space Multi-Task Model: An Effective Approach for Estima ...
- 超详攻略!Databricks 数据洞察 - 企业级全托管 Spark 大数据分析平台及案例分析
简介: 5分钟读懂 Databricks 数据洞察 ~ 更多详细信息可登录 Databricks 数据洞察 产品链接:https://www.aliyun.com/product/bigdata/sp ...
- WPF 如何知道当前有多少个 DispatcherTime 在运行
在 WPF 调试中,对于 DispatcherTimer 定时器的执行,没有直观的调试方法.本文来告诉大家如何在 WPF 中调试当前主线程有多少个 DispatcherTimer 在运行 在 WPF ...
- 2019-10-31-VisualStudio-断点调试详解
title author date CreateTime categories VisualStudio 断点调试详解 lindexi 2019-10-31 8:56:7 +0800 2019-06- ...
- spannerlib优雅的go异常处理
蹩脚的go 异常处理 一般写go的人,如果他不是写算法,正常写业务代码的话,可能都会为优雅的异常处理而烦恼,因为脑子抽筋的go设计者们,总是感觉语法糖是一种很低级的东西.但是在我们大多数公司的业务逻辑 ...
- 003_Orcad菜单讲解与偏好设置
003_Orcad菜单讲解与偏好设置 菜单栏用的比较多的是File和Options项. 网格建议用lines,比较方便对齐. Auto Reference和Intertool Commuication ...