pandas基础--层次化索引

以下代码的前提:import pandas as pd

层次化索引使你能在一个轴上拥有多个(两个以上)索引级别。抽象的说,它使你能以低维度形式处理高维度数据。

 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中。

 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 -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

1.1 重排分级排序

有时需要调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(当数据不会发生变化)。

 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

1.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 >>>

1.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

原文地址:https://www.cnblogs.com/mrlayfolk/p/12256500.html

时间: 2024-08-21 14:30:05

pandas基础--层次化索引的相关文章

利用Python进行数据分析(11) pandas基础: 层次化索引

层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引Series转换为DataFrame 层次化索引在数据重塑和分组中扮演着很重要的角色,例如,上面的层次化索引数据可以转换为一个DataFrame: 对于一个DataFrame,横轴和竖轴都可以有层次化索引,例如: 重排分级顺序 根据索引交换 swaplevel()函数可以将两个级别的数据进行交换,例如: 根据

Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识

第1节 pandas 回顾 第2节 读写文本格式的数据 第3节 使用 HTML 和 Web API 第4节 使用数据库 第5节 合并数据集 第6节 重塑和轴向旋转 第7节 数据转换 第8节 字符串操作 第9节 绘图和可视化 pandas 回顾 一.实验简介 学习数据分析的课程,需要同学们掌握好 Python 的语言基础,和对 Numpy 与 Matplotlib 等基本库有一些了解.同学们可以参考学习实验楼的 Python 语言基础教程与 Python 科学计算的课程. pandas 是后面我们

层次化索引

层次化索引 层次化索引(hierarchical indexing)是pandas的一项重要功能, 它使你能在一个轴上拥有多个(两个以上)索引级别. 抽象点说,它使你能以低维度形式处理高维度数据. 先看个Series例子: 对于一个层次化索引的对象, 选取数据子集的操作很简单: 有时甚至还可以在“内层”中进行选取: 根据层次化索引进行数据重塑 层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色.比如,这段数据可以通过其unstack 方法被重新安排到一个DataFrame中:

Pandas基础学习与Spark Python初探

摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域.在Spark中,python程序可以方便修改,省去java和scala等的打包环节,如果需要导出文件,可以将数据转为pandas再保存到csv,excel等. 1.Pandas是什么? pandas是一个强大的Python数据分析工具包,是一个提供快速,灵活和表达性数据结构的python包,旨在使

数据分析:pandas 基础

pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 .Series 和 DataFrame 分别对应于一维的序列和二维的表结构.pandas 约定俗成的导入方法如下: lang:python from pandas import Series,DataFrame import pandas as pd <br /> Series Ser

python学习笔记(四):pandas基础

pandas 基础 serise import pandas as pd from pandas import Series, DataFrame obj = Series([4, -7, 5, 3]) obj 0 4 1 -7 2 5 3 3 dtype: int64 obj.values array([ 4, -7, 5, 3], dtype=int64) obj.index RangeIndex(start=0, stop=4, step=1) obj[[1,3]] # 跳着选取数据 1

pandas基础命令速查表

pandas基础命令速查表 数据的导入 数据的导出 创建测试对象 数据的查看与检查 数据的选取 数据的清洗 数据的过滤(filter)排序(sort)和分组(group) 数据的连接(join)与组合(combine) 一.数据的导入 pd.read_csv(filename) # 导入csv格式文件中的数据 pd.read_table(filename) # 导入有分隔符的文本 (如TSV) 中的数据 pd.read_excel(filename) # 导入Excel格式文件中的数据 pd.r

pandas 基础操作 更新

创建一个Series,同时让pandas自动生成索引列 创建一个DataFrame数据框 查看数据 数据的简单统计 数据的排序 选择数据(类似于数据库中sql语句) 另外可以使用标签来选择 通过位置获取数据 布尔值索引 设定数值(类似于sql update 或者add) 缺失值处理 数据操作 统计个数与离散化 pandas 处理字符串(单独一个大的章节,这人不做详述) 数据合并 首先看concat合并数据框 merge方式合并(数据库中的join) Append方式合并数据 分组操作Groupb

基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数据集. 所以可以是如下的 dictionary 的形式: web_stats = {'Day':[1,2,3,4,5,6], 'Visitors':[43,34,65,56,29,76], 'Bounce Rate':[65,67,78,65,45,52]} 我们可以通过如下方式把这个 dictio