查看全课大纲(第 54 / 101 节)
- 1.数据分析基本概念
- 2.学习数据分析的一般路线
- 3.数据分析的流程
- 4.数据类型
- 5.环境部署(1)
- 6.环境部署(2)
- 7.课程介绍
- 8.TXT文件操作
- 9.JSON文件操作
- 10.CSV文件操作
- 11.Excel文件操作
- 12.数据库及SQL常用语法
- 13.数据库基本操作
- 14.数据库多表连接
- 15.实战:欧洲职业足球数据库分析
- 16.爬虫简介
- 17.URL管理模块
- 18.网页下载模块
- 19.网页解析模块(1)
- 20.网页解析模块(2)
- 21.Scrapy简介
- 22.Scrapy使用步骤(1)
- 23.Scrapy使用步骤(2)
- 24.Scrapy使用步骤(3)
- 25.Scrapy使用步骤(4)
- 26.实战:获取国内城市空气质量指数数据
- 27.NumPy和SciPy介绍
- 28.多维数组
- 29.多维数组操作
- 30.NumPy的常用方法
- 31.向量化介绍
- 32.向量化及通用函数
- 33.实战:2016美国大选分析
- 34.数据结构-Series
- 35.数据结构-DataFrame
- 36.数据结构-Index
- 37.Series的索引操作
- 38.DataFrame的索引操作
- 39.索引操作总结
- 40.运算与对齐
- 41.函数应用操作(1) -- map
- 42.函数应用操作 (2) -- apply applymap
- 43.文件读写操作
- 44.排序操作
- 45.数据清洗--处理缺失数据
- 46.数据清洗--处理重复数据
- 47.数据清洗--替换数据
- 48.常用统计方法(1) -- describe quantile
- 49.常用统计方法(2) -- sum mean median count
- 50.常用统计方法(3) -- max min idxmax idxmin
- 51.常用统计方法(4) -- mad var std cumsum
- 52.实战:全球食品数据分析
- 53.层级索引
- 54.分组与聚合介绍
- 55.分组操作(1) -- GroupBy对象及常用聚合操作
- 56.分组操作(2) -- 自定义分组及聚合操作
- 57.透视表介绍
- 58.透视表操作
- 59.数据规整(1) -- 数据合并concat
- 60.数据规整(2) -- 数据连接merge
- 61.数据重构(3) -- 数据重构stack unstack
- 62.实战:互联网电影资料库分析
- 63.探索性数据分析EDA介绍
- 64.EDA的目的
- 65.EDA常用工具
- 66.Matplotlib绘图基本介绍
- 67.Matplotlib画布
- 68.散点图和柱状图的绘制
- 69.直方图的绘制
- 70.矩阵绘图
- 71.子图的使用
- 72.Matplotlib颜色、标记、线型
- 73.Matplotlib坐标刻度、标签、图例、标题
- 74.Seaborn介绍
- 75.数据集分布可视化(1) -- 单变量分布、双变量分布
- 76.数据集分布可视化(2) -- 变量关系可视化
- 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
- 78.交互式数据可视化工具Bokeh介绍
- 79.Bokeh绘制散点图、柱状图、盒子图、弦图
- 80.Bokeh绘制常用图形元素
- 81.3D绘图 -- mplot3d
- 82.3D曲线可视化
- 83.3D散点图可视化
- 84.3D柱状图可视化
- 85.Pandas绘图
- 86.实战:Lending Club借贷数据探索性分析及可视化
- 87.机器学习介绍及应用场景
- 88.机器学习建模介绍 (1) -- 分类
- 89.机器学习建模介绍 (2) -- 回归
- 90.机器学习建模介绍 (3) -- 聚类
- 91.机器学习分类
- 92.机器学习工具scikit-learn
- 93.使用scikit-learn的流程
- 94.数据集准备及划分
- 95.模型选择
- 96.数据预处理及特征工程
- 97.过拟合与欠拟合
- 98.模型调参介绍
- 99.模型调参方法
- 100.模型测试及评价
- 101.实战:通过移动设备行为数据预测性别和年龄
分组与聚合介绍
约 6 分钟
小象实战讲义 · Python数据分析实战
在数据分析中,我们常常需要按照某个类别或条件将数据分成不同的组,然后对每个组进行统计分析,例如计算各组的平均值、总和或数量。这正是分组与聚合操作的核心应用场景。本节将介绍如何使用pandas的groupby方法,高效地完成“拆分-应用-合并”这一经典数据处理流程,并理解聚合操作的本质。
💡 核心导读
- 分组(Grouping):根据一个或多个键(类别)将数据集拆分成多个子集。
- 聚合(Aggregation):对每个分组应用一个函数,将数组(一组值)转换为一个标量(如平均值、总和)。
- “拆分-应用-合并”(Split-Apply-Combine):
groupby操作背后的标准流程,理解它有助于掌握分组聚合的原理。 - pandas实现:使用
DataFrame.groupby()方法进行分组,配合.mean()、.sum()、.count()等聚合函数进行计算。
分组与聚合的概念
在数据分析中,我们经常遇到这样的需求:数据集中包含类别信息,我们需要分别查看每个类别的统计特征。例如,一个销售数据表中有“产品类别”和“销售额”两列,我们希望知道每个产品类别的总销售额或平均销售额。
分组(Grouping) 就是根据某个或某几个类别列,将数据集拆分成多个独立的子集。聚合(Aggregation) 则是对每个分组子集应用一个计算规则(如求和、求平均),将一组数据(数组)汇总为一个单一的标量值。
pandas库提供了强大的groupby方法,能够非常方便地实现这一系列操作。其背后的标准流程被称为 “拆分-应用-合并”(Split-Apply-Combine)。
“拆分-应用-合并”流程详解
groupby操作可以分解为三个清晰的步骤,理解它们有助于我们更好地掌握分组聚合的原理。
1. 拆分(Split)
根据指定的一个或多个列(键)的值,将原始的DataFrame拆分成若干个独立的组(Group)。每个组包含所有键值相同的行。
2. 应用(Apply)
对拆分后的每一个组,独立地应用一个计算函数。这个函数可以是求和(sum)、求平均值(mean)、计数(count)等,也可以是自定义的复杂函数。
3. 合并(Combine)
将每个组应用函数后得到的计算结果,按照分组键重新组合成一个新的数据结构(通常是Series或DataFrame)并返回。
这个过程如下图所示(用文本示意):
原始数据 (DataFrame):
类别 数值
0 A 1
1 B 3
2 A 2
3 C 2
4 B 1
5 C 2
拆分 (Split by ‘类别’):
组A: [数值: 1, 2]
组B: [数值: 3, 1]
组C: [数值: 2, 2]
应用 (Apply mean()):
组A: (1+2)/2 = 1.5
组B: (3+1)/2 = 2.0
组C: (2+2)/2 = 2.0
合并 (Combine):
类别
A 1.5
B 2.0
C 2.0
Name: 数值, dtype: float64需要注意的是,在实际使用pandas时,我们无需手动执行这三步。DataFrame.groupby()方法会内部完成整个过程,我们只需要调用它并指定聚合函数即可。
使用pandas进行分组聚合
下面我们通过一个具体的例子,演示如何使用pandas完成分组与聚合操作。假设我们有一个包含班级和分数的小型数据集。
import pandas as pd
# 在代码块内构造示例数据
data = {
'班级': ['A班', 'B班', 'A班', 'C班', 'B班', 'C班'],
'分数': [85, 92, 78, 88, 95, 82]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
print()
# 使用 groupby 计算每个班级的平均分
grouped = df.groupby('班级') # 拆分:按‘班级’分组
result = grouped['分数'].mean() # 应用与合并:对‘分数’列求均值
print("每个班级的平均分:")
print(result)
print(f"结果类型:{type(result).__name__}")原始数据:
班级 分数
0 A班 85
1 B班 92
2 A班 78
3 C班 88
4 B班 95
5 C班 82
每个班级的平均分:
班级
A班 81.5
B班 93.5
C班 85.0
Name: 分数, dtype: float64
结果类型:Series代码解析:
df.groupby(‘班级’):执行拆分操作,生成一个DataFrameGroupBy对象。此时数据已按‘班级’分成了A班、B班、C班三个组。grouped[‘分数’].mean():先选中‘分数’列,然后对每个分组应用mean()函数进行应用(求平均),最后将结果合并成一个新的Series。- 最终结果是一个Series,索引是分组键(班级),值是对应班级的平均分。
常用的聚合函数
pandas提供了丰富的内置聚合函数,可以直接在GroupBy对象上调用。以下是一些最常用的函数:
import pandas as pd
# 构造新的示例数据,包含多个数值列
data = {
'部门': ['销售', '技术', '销售', '技术', '行政', '行政'],
'销售额': [200, 150, 300, 250, 100, 120],
'成本': [80, 90, 120, 110, 40, 50]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
print("\n按‘部门’分组后的多种聚合统计:")
# 同时计算多个聚合指标
agg_result = df.groupby('部门').agg({
'销售额': ['sum', 'mean', 'max'], # 对销售额求和、平均、求最大值
'成本': 'sum' # 对成本求和
})
print(agg_result)原始数据:
部门 销售额 成本
0 销售 200 80
1 技术 150 90
2 销售 300 120
3 技术 250 110
4 行政 100 40
5 行政 120 50
按‘部门’分组后的多种聚合统计:
销售额 成本
sum mean max sum
部门
技术 400 200.0 250 200
行政 220 110.0 120 90
销售 500 250.0 300 200除了在agg函数中指定,也可以分别调用:
sum():求和mean():求平均值count():计数(非空值个数)size():计算每组大小(包含空值)max()/min():求最大值/最小值std()/var():求标准差/方差
聚合操作的本质,正如讲师在视频中所说,是“数组产生标量的过程”。每个分组内的数据(如销售部的销售额[200, 300])经过聚合函数(如sum)的处理,产生了一个单一的标量结果(500)。
📝 动手练一练
概念辨析:在“拆分-应用-合并”流程中,“应用”(Apply)步骤可以执行哪些类型的操作?除了求平均值、求和,你还能想到什么?
👉 点击查看参考答案
“应用”步骤可以执行任何能够处理一个数据子集(即一个分组)并返回一个结果的函数。除了常见的统计聚合(
mean,sum,count,max,min,std,var),还可以包括:- 数据转换:如对组内数据标准化(
lambda x: (x - x.mean()) / x.std())。 - 筛选:如返回组内销售额超过阈值的所有行(
filter)。 - 自定义函数:任何用户定义的、能接收Series或DataFrame并返回一个标量或Series的函数。 核心是函数作用于单个分组并产生输出。
- 数据转换:如对组内数据标准化(
动手实践:使用下面提供的数据,计算每个
产品ID对应的订单数量(即行数)和销售总额。import pandas as pd # 请在此代码框架内完成练习 data = { '产品ID': ['P001', 'P002', 'P001', 'P003', 'P002', 'P001'], '销售额': [100, 150, 200, 80, 120, 90] } df = pd.DataFrame(data) # 你的代码 here👉 点击查看参考答案
import pandas as pd data = { '产品ID': ['P001', 'P002', 'P001', 'P003', 'P002', 'P001'], '销售额': [100, 150, 200, 80, 120, 90] } df = pd.DataFrame(data) # 计算每个产品的订单数量(行数)和销售总额 result = df.groupby('产品ID').agg( 订单数量=('销售额', 'count'), # 对‘销售额’列计数,统计订单数 销售总额=('销售额', 'sum') # 对‘销售额’列求和 ).reset_index() # 将‘产品ID’从索引变回列,使结果更直观 print(result)运行结果应为:
产品ID 订单数量 销售总额
0 P001 3 390
1 P002 2 270
2 P003 1 80</details>本章小结
本节我们深入学习了数据分析中至关重要的分组与聚合操作。我们了解到,分组是将数据按类别拆解的过程,而聚合则是将每个分组的数据汇总为单一统计量的过程。pandas通过groupby方法及其背后的“拆分-应用-合并”范式,为我们提供了高效、简洁的工具来完成此类任务。
📋 行动清单
- 理解核心流程:回顾“拆分-应用-合并”三步,确保能用自己的话解释清楚。
- 掌握基础语法:熟练使用
df.groupby(列名)[列名].聚合函数()的基本形式进行计算。 - 尝试多元聚合:使用
.agg()函数,对分组后的数据一次性计算多个统计指标。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载本节课件:分组与聚合介绍PDF · 207KB
- 下载全套课件打包(第1-5章)ZIP · 12.8MB
- 下载全套课件打包(第6-8章)ZIP · 15MB
- 下载实战数据集:AppleStore 应用商城分析ZIP · 329KB
- 下载实战数据集:女性服装电商分析ZIP · 2.8MB
- 下载Python 数据分析环境搭建指南PDF · 2MB
- 下载Scrapy 安装教程PDF · 12.7MB
- 下载附加实战项目:AppleStore 应用商城数据分析ZIP · 0.3MB · ipynb + CSV 数据
- 下载附加实战项目:银行电话营销数据分析ZIP · 0.4MB · ipynb + CSV 数据
- 下载附加实战项目:女性服装电商评论数据分析ZIP · 2.7MB · ipynb + CSV 数据
- 下载附加实战项目:美国化学学会杂志数据分析ZIP · 34.2MB · ipynb + SQLite 数据库