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() 获取最大值对应的索 ...
随机推荐
- Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET 版本
前言: 上次发布了:Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本 今天计划准备压测一下 .NET 版本,来测试并记录一下 Taurus.M ...
- 快速上手Linux核心命令
Linux 的重要性不用我多说了吧,大多数互联网公司,服务器都是采用的Linux操作系统 Linux是一个主要通过命令行来进行管理的操作系统. 只有熟练掌握Linux核心命令,在使用起来我们才会得心应 ...
- 前端js解析识别图片二维码
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 文本溢出显示省略号css
项目中常常有这种需要我们对溢出文本进行"..."显示的操作,单行多行的情况都有(具体几行得看设计师心情了),这篇随笔是我个人对这种情况解决办法的归纳,欢迎各路英雄指教. 单行 语法 ...
- HL7传输协议
HL7消息通过各种TCP/IP传输发送,其中一些包括: 下层协议(LLP) 文件传输协议(FTP) 简单对象访问协议(SOAP) 简单邮件传输协议(SMTP) 尽管HL7可以使用多种传输协议进行数据传 ...
- 了解3D世界的黑魔法-纯Java构造一个简单的3D渲染引擎
简介: 对于非渲染引擎相关工作的开发者来说,可能认为即使构建最简单的3D程序也非常困难,但事实上并非如此,本篇文章将通过简单的200多行的纯 Java代码,去实践正交投影.简单三角形光栅化.z缓冲(深 ...
- dotnet SemanticKernel 入门 开篇
本文将开坑告诉大家什么是 SemanticKernel 以及如何使用框架 众所周知 GPT 是一个大语言模型,能够参与的输入和输出是文本内容.而想要让 GPT 完成各项功能,则需要对接现有的编程世界. ...
- Centos下虚拟环境的创建以及python3安装
1.python3自己安装 ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3 ln -s /usr/local/python3/bin/p ...
- EPAI手绘建模APP常用工具栏_1
1.常用工具栏 图 1 常用工具栏 (1) 撤销 (2) 重做 (3) 删除 (4) 复制 ① 选中场景中的模型后,复制按钮变成可用状态,否则变成禁用状态.可以选择多个模型一起复制. (5) 变换 图 ...
- 2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s。 找出集合s中可能包含的最多元素数量。 输入:nums
2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s. 找出集合s中可能包含的最多元素数量. 输入:nums ...