Pandas高效操作:数据分组与聚合的实战指南
面对大量数据,如何快速提取有价值的信息?Pandas的数据分组与聚合功能来帮忙。本文将通过实战案例,教你如何高效进行数据分组与聚合。
引言 / 什么是数据分组与聚合
在数据分析工作中,我们经常需要面对海量数据,如何从这些数据中快速提取有价值的信息是关键。Pandas作为Python中最强大的数据分析库之一,其groupby()函数和聚合操作(如sum()、mean()、max()等)为我们提供了高效的解决方案。
数据分组是指按照某个或某些标准将数据集划分为多个组,而聚合则是对每个组进行统计计算。这种组合操作可以帮助我们快速发现数据中的模式和趋势,例如:计算不同地区的销售总额、分析不同用户群体的行为特征等。
本文将通过实际案例,详细介绍如何使用Pandas进行数据分组与聚合操作,帮助你掌握这一高效的数据分析技巧。
准备工作
在开始之前,请确保你已经安装了Pandas库。如果没有安装,可以使用以下命令安装:
pip install pandas
我们还需要准备一些示例数据。这里我们创建一个简单的销售数据集:
import pandas as pd
data = {
'日期': ['2026-01-01', '2026-01-01', '2026-01-02', '2026-01-02', '2026-01-03', '2026-01-03'],
'地区': ['北京', '上海', '北京', '上海', '北京', '上海'],
'产品': ['A', 'A', 'B', 'B', 'A', 'B'],
'销售额': [1000, 1500, 1200, 1800, 900, 2000],
'数量': [10, 15, 12, 18, 9, 20]
}
df = pd.DataFrame(data)
print(df)
输出结果:
日期 地区 产品 销售额 数量
0 2026-01-01 北京 A 1000 10
1 2026-01-01 上海 A 1500 15
2 2026-01-02 北京 B 1200 12
3 2026-01-02 上海 B 1800 18
4 2026-01-03 北京 A 900 9
5 2026-01-03 上海 B 2000 20
基础操作 / 核心用法
步骤一:使用groupby进行数据分组
groupby()函数是Pandas中实现数据分组的核心方法。它的基本语法如下:
grouped = df.groupby(by='分组列名')
让我们先按照"地区"列对数据进行分组:
region_group = df.groupby('地区')
print(region_group)
输出结果:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f8b7c3b3a90>
可以看到,groupby()返回的是一个DataFrameGroupBy对象,而不是直接显示分组结果。要查看分组后的数据,我们可以使用聚合函数或遍历分组对象。
步骤二:对分组数据进行聚合计算
最常用的聚合操作是计算每个组的统计量。Pandas提供了多种聚合方法:
- 基本聚合函数:
sum(): 求和mean(): 平均值max(): 最大值min(): 最小值count(): 计数std(): 标准差
让我们计算每个地区的销售总额和平均销售额:
region_sales = df.groupby('地区')['销售额'].agg(['sum', 'mean'])
print(region_sales)
输出结果:
sum mean
地区
北京 3100 1033.333333
上海 5300 1766.666667
- 多列聚合:
我们也可以同时对多列进行不同的聚合计算:
region_stats = df.groupby('地区').agg({
'销售额': ['sum', 'mean', 'max'],
'数量': ['sum', 'mean']
})
print(region_stats)
输出结果:
销售额 数量
sum mean max sum mean
地区
北京 3100 1033.333333 1200 31 10.333333
上海 5300 1766.666667 2000 53 17.666667
进阶技巧
技巧一:多列分组
除了单列分组,我们还可以按照多列进行分组。例如,我们想分析不同地区不同产品的销售情况:
region_product_group = df.groupby(['地区', '产品'])['销售额'].sum()
print(region_product_group)
输出结果:
地区 产品
北京 A 1900
B 1200
上海 A 1500
B 3800
Name: 销售额, dtype: int64
这是一个多级索引的结果。我们可以使用unstack()方法将其转换为更易读的表格形式:
region_product_table = df.groupby(['地区', '产品'])['销售额'].sum().unstack()
print(region_product_table)
输出结果:
产品 A B
地区
北京 1900 1200
上海 1500 3800
技巧二:自定义聚合函数
除了内置的聚合函数,我们还可以定义自己的聚合函数。例如,计算销售额与数量的比值(平均单价):
def avg_price(group):
return group['销售额'].sum() / group['数量'].sum()
region_avg_price = df.groupby('地区').apply(avg_price)
print(region_avg_price)
输出结果:
地区
北京 100.0
上海 100.0
dtype: float64
或者使用agg()方法配合lambda函数:
region_avg_price = df.groupby('地区').agg(
avg_price=('销售额', lambda x: x.sum() / df.loc[x.index, '数量'].sum())
)
print(region_avg_price)
技巧三:分组后筛选数据
有时候我们需要在分组后对组内数据进行筛选。例如,找出每个地区销售额最高的产品:
# 方法1:使用idxmax()获取每组最大值的索引
top_products = df.loc[df.groupby('地区')['销售额'].idxmax()]
print(top_products)
输出结果:
日期 地区 产品 销售额 数量
1 2026-01-01 上海 A 1500 15
0 2026-01-01 北京 A 1000 10
5 2026-01-03 上海 B 2000 20
常见问题
Q:groupby后如何重置索引?
A:使用reset_index()方法可以将分组键从索引转换为列:
region_sales = df.groupby('地区')['销售额'].sum().reset_index()
print(region_sales)
Q:如何对分组后的结果进行排序?
A:可以使用sort_values()方法:
region_sales = df.groupby('地区')['销售额'].sum().sort_values(ascending=False)
print(region_sales)
Q:如何计算分组后的百分比?
A:可以先计算总和,然后除以总和:
total_sales = df['销售额'].sum()
region_percentage = df.groupby('地区')['销售额'].sum() / total_sales
print(region_percentage)
Q:如何对分组后的多个列应用不同的聚合函数?
A:可以使用字典指定不同列的聚合方式:
stats = df.groupby('地区').agg({
'销售额': ['sum', 'mean'],
'数量': 'sum'
})
print(stats)
小结
本文详细介绍了Pandas中数据分组与聚合的核心操作,包括:
- 使用
groupby()函数进行单列或多列分组 - 对分组数据进行各种聚合计算(sum、mean、max等)
- 高级技巧如自定义聚合函数、分组后筛选数据
- 常见问题的解决方案
掌握这些技巧后,你可以轻松处理各种数据分析场景,如:
- 计算不同时间段的销售趋势
- 分析不同用户群体的行为特征
- 比较不同产品的市场表现
建议读者在实际项目中多加练习,熟练掌握这些操作将大大提高你的数据分析效率。
💡 推荐阅读
Excel错误值处理的7个实用技巧
系统讲解Excel错误值的处理方案,涵盖#N/A、#DIV/0!、#VALUE!等常见错误的解决方法,提升公式稳定性。
Word段落格式设置:让文档结构更清晰
段落格式设置是Word排版的关键。本文将教你如何通过段落缩进、行距、对齐方式等设置,让文档结构更加清晰,提升阅读体验。
Word长文档如何快速生成目录?超详细教程
还在为Word长文档的目录生成而烦恼吗?本文将详细介绍如何利用Word内置功能,快速生成美观且可自动更新的目录,让你的文档结构一目了然。
如何用AI工具快速生成短视频封面和标题?
AI工具能大幅提升短视频封面和标题的设计效率。本文介绍几款实用AI工具,助你快速生成高质量封面和标题。
安卓手机实用技巧:让手机更好用的50个小技巧
整理50个最实用的安卓手机使用技巧,包括系统设置优化、截图录屏、通知管理、省电技巧和隐藏功能,让你的手机更好用更省电。
Figma入门教程:UI设计从零开始
Figma是目前最流行的UI/UX设计工具。本教程介绍Figma的基础操作、画板、组件、Auto Layout等核心功能,帮助设计初学者快速上手。
Photoshop入门教程:PS基础操作完全指南
本教程介绍Adobe Photoshop的核心概念和基础操作,包括界面认识、图层管理、选区工具、常用调色功能,帮助零基础用户快速入门PS。
数码配件保养与维护:延长使用寿命的小技巧
数码配件也需要保养!本文分享一些实用的保养与维护小技巧,帮助你延长数码配件的使用寿命,节省更换成本!
Excel入门教程:从零开始学Excel
本教程带你从零开始学习Excel,了解界面组成、基本操作、数据输入与格式设置,轻松掌握Excel基础知识。
MongoDB 聚合框架详解:数据处理的利器
想高效处理 MongoDB 中的数据吗?聚合框架是你的不二之选。本文详细讲解聚合管道的使用方法。
Docker 镜像构建:从 Dockerfile 到自定义镜像
想要构建自己的 Docker 镜像吗?本文将详细讲解 Dockerfile 的编写技巧,带你从零开始构建自定义镜像,满足个性化开发需求。
揭秘:Windows系统开机加速的隐藏技巧
Windows系统开机慢?可能是你没发现这些隐藏技巧!本文将揭秘Windows系统开机加速的多个隐藏设置,让你的电脑启动如飞,告别卡顿。
Asana 高级功能解析:提升项目管理效率
Asana 是一款功能强大的项目管理工具,本文将深入解析其高级功能,如自定义字段、工作流自动化等,助你提升项目管理效率。
Windows使用技巧:让电脑运行更快更高效
收集整理最实用的Windows使用技巧,包括提升电脑速度的优化方法、高效操作快捷键、文件管理技巧和系统维护建议,适合所有Windows用户。
Excel数据透视表入门指南:零基础也能学会
还在为Excel数据透视表发愁?本文将带你从零开始,逐步掌握数据透视表的基本操作,包括创建、字段设置和基础分析,轻松搞定数据汇总!
MongoDB 索引优化:提升查询性能的关键
查询性能不佳?MongoDB 索引优化来帮忙。本文教你如何创建和使用索引,显著提升查询速度。
Word排版技巧:让文档看起来更专业
掌握Word核心排版技巧:样式、段落格式、字体设置、页面布局,让你的文档既美观又规范,告别手动逐段调格式的低效方式。
WPS Office完全使用指南
WPS Office是国内使用最广泛的免费办公软件。本教程介绍WPS的安装、三大组件(文字/表格/演示)的基础使用,以及与Microsoft Office的兼容性处理。
百度网盘文件恢复与版本控制:数据安全有保障
误删文件或需要回滚到旧版本?百度网盘的文件恢复与版本控制功能来帮忙,轻松恢复误删文件,查看并恢复文件历史版本。
CAD编辑命令大全:修剪与延伸的实用技巧
修剪与延伸是CAD编辑中不可或缺的命令。本文将全面介绍这两个命令的实用技巧,助你轻松应对各种图形编辑需求。