Pandas 分组聚合操作丨慕课网教程 | 您所在的位置:网站首页 › dataframegroupby › Pandas 分组聚合操作丨慕课网教程 |
Pandas 分组聚合操作
1. 前言
上一节我们学习了 Pandas 对数据的重塑操作,可以满足我们对数据集不同结构的分析需要,而有时候我们还需要对数据依据某个类别进行分组的需要,以及在分组后对每组数据进行分析的需要,那 Pandas 中的数据分组操作又是怎么实现的呢? Pandas 库中提供了友好的数据分组聚合操作,分组聚合的过程包括数据的拆分、应用和聚合,如下图所示的过程。数据的分组操作主要涉及函数 groupby (),而聚合函数则有很多,在下面的学习中我们会列举一些聚合函数的具体使用方法。 2. 分组操作Pandas 中的分组操作主要通过函数 groupby () 实现,该函数对数据进行分组,并不会产生运算,分组后会返回一个 groupby 对象,该对象并不能展示数据,要通过具体的操作函数才能看到数据结果。 首先我们通过 Pandas 解析 Excel 数据,得到 DataFrame 数据对象: # 导入pandas包 import pandas as pd data_path="C:/Users/13965/Documents/myFuture/IMOOC/pandasCourse-progress/data_source/第19小节/execl数据demo.xlsx" # 解析数据 data = pd.read_excel(data_path) print(data) # --- 输出结果 --- 编程语言 技术方向 推出时间 年均销售数量 价格 主要创始人 0 java 后端 1995年 230 45.6 James Gosling 1 HTML 前端 1990年 124 55.3 Daniel W. Connolly 2 C 后端 1972年 35 33.9 Dennis MacAlistair Ritchie 3 js 前端 1995年 678 59.5 Brendan Eich 4 C++ 后端 1983年 125 75.0 Bjarne Stroustrup 5 CSS 前端 1990年 254 24.6 Tim Berners-Lee接下来我们进行分组操作: # data 为上面解析的数据对象 # 这里依据技术方向列进行分组 data.groupby('技术方向') # --- 输出结果 --- # 结果解析:这里我们使用的是单个索引‘技术方向’进行分组,也可以传入一个列表进行分组。这里可以看到输出的是一个 DataFrameGroupBy 对象 3. 聚合操作聚合操作是分组的目的,通过聚合操作对各组数据进行聚合,得到一定的分析效果,Pandas 中提供了大量的聚合操作函数,我们下面列举了部分,用以展示数据分组后进行聚合操作的效果。 函数名 说明 count 各分组中非 NaN 值的数量 sum 各分组中非 NaN 值的和 mean 各分组中非 NaN 值的平均值下面我们通过代码详细介绍聚合函数的使用: 1. sum() 函数 该函数用于求各组数值数据的和,非数值数据不进行该聚合操作。 data.groupby(['技术方向','推出时间']).sum() # --- 输出结果 --- 年均销售数量 价格 技术方向 推出时间 前端 1990年 378 79.9 1995年 678 59.5 后端 1972年 35 33.9 1983年 125 75.0 1995年 230 45.6 # 结果解析:这里我们指定分组索引依据为列表,传入‘技术方向’,‘推出时间’,则分组是先以技术方向分为“前端”和“后端”,再以推出时间进行分组,带分组之后,进行 sum() 各组求和的聚合运算,得到各组的年均销售数量和价格的数据结果。在这里我们要补充一个下 groupby () 函数中的一个参数:as_index ,该参数默认为 True,是用来指定是否用分组索引作为聚合结果数据集的行索引,上面的代码中,默认 as_index=True ,因此行索引会有两层,分别为技术方向和推出时间,下面我们通过指定 as_index=False , 默认行索引会从 0 开始生成序列: # data 为上面解析的数据对象 # 指定 as_index=False data.groupby(['技术方向','推出时间'],as_index=False).sum() # --- 输出结果 --- 技术方向 推出时间 年均销售数量 价格 0 前端 1990年 378 79.9 1 前端 1995年 678 59.5 2 后端 1972年 35 33.9 3 后端 1983年 125 75.0 4 后端 1995年 230 45.6 # 结果解析:可以看到聚合后的数据集行索引为默认生成。2. count() 函数 该函数用于计算分组后各组数据的数量。 # data 为上面解析的数据对象 # count() 函数 data.groupby(['技术方向','推出时间'],as_index=False)['编程语言','年均销售数量','价格'].count() # --- 输出结果 --- 技术方向 推出时间 编程语言 年均销售数量 价格 0 前端 1990年 2 2 2 1 前端 1995年 1 1 1 2 后端 1972年 1 1 1 3 后端 1983年 1 1 1 4 后端 1995年 1 1 1结果解析:这里我们通过 count () 进行聚合,并指定只聚合 “编程语言”,“年均销售数量”,“价格” 列的数据数量。 3. mean() 函数 该函数用于进行各分组数据的平均值的计算,该函数只对数值数据进行聚合。 # data 为上面解析的数据对象 # mean() 函数 data.groupby(['技术方向'],as_index=False).mean() # --- 输出结果 --- 技术方向 年均销售数量 价格 0 前端 352 46.466667 1 后端 130 51.500000结果解析:通过 groupby 指定以技术方向进行分组,分为前端和后端,然后进行平均值的聚合操作。 4. 小结本节课程我们主要学习了 Pandas 对数据进行分组和聚合操作的内容,通过分组操作可以将数据根据不同的组类进行分组,通过聚合函数可以达到对每组数据的不同分析需要。本节课程的重点如下: 了解分组和聚合之间的关系; 掌握分组操作 groupby () 函数的使用方法; 掌握常用的聚合操作函数的使用方法。 划线 写笔记 复制0/1000 |
CopyRight 2018-2019 实验室设备网 版权所有 |