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等)
- 高级技巧如自定义聚合函数、分组后筛选数据
- 常见问题的解决方案
掌握这些技巧后,你可以轻松处理各种数据分析场景,如:
- 计算不同时间段的销售趋势
- 分析不同用户群体的行为特征
- 比较不同产品的市场表现
建议读者在实际项目中多加练习,熟练掌握这些操作将大大提高你的数据分析效率。
💡 推荐阅读
剪映模板素材哪里找?优质资源推荐
想要找到优质的剪映模板素材?本文为你推荐几个可靠的资源网站,让你轻松获取丰富多样的模板素材,提升视频制作水平。
手机进水后如何紧急处理?5步自救指南
手机意外落水别慌!掌握这5个紧急处理步骤,能大幅降低手机损坏风险,甚至可能让手机恢复如初。快来学习正确的自救方法吧!
Android通知历史记录:轻松回顾错过的消息
错过重要消息?Android通知历史记录来帮你!本文教你如何查看和管理通知历史记录,不再错过任何重要信息。
批量打印入门:如何快速设置打印任务?
批量打印能大幅提升效率,但设置起来却让不少人头疼。本文将带你从零开始,学习如何快速设置打印任务,掌握基础技巧,让打印变得轻松又高效。
WPS演示图表制作技巧:数据可视化轻松搞定
数据太多难以呈现?本文将教你如何使用WPS演示制作图表,将复杂数据转化为直观图表,让观众一眼看懂数据背后的故事,提升演示说服力。
如何通过外链(Backlinks)提升网站权重?
外链是SEO中重要的排名因素之一,高质量的外链能显著提升网站权重。本文将教你如何获取高质量外链,避免低质量外链的坑,让你的网站排名更上一层楼。
电脑开机无反应?5步排查法轻松解决
电脑按下电源键却毫无反应?别慌!本文教你5步排查法,从电源、主板到内存,逐步定位问题根源,轻松解决开机无反应的难题。
手机充电显示异常?解读与修复指南
手机充电时显示异常?本文解读常见显示问题,如不显示充电、电量跳变等,并提供修复方法,让你的手机充电显示恢复正常。
OBS 录屏软件安装全攻略:零基础快速上手
还在为 OBS 安装问题发愁?本文将详细介绍 OBS 录屏软件在 Windows、Mac 系统上的安装步骤,以及安装过程中的常见问题及解决方法,让你轻松开启录屏之旅。
Excel打印高级技巧:如何打印网格线和批注?
打印Excel表格时,如何打印网格线和批注?本文教你使用Excel的高级打印设置,轻松实现网格线和批注的打印。
手机夜景拍摄全攻略:轻松拍出璀璨夜色
夜景拍摄是手机摄影的难点,但掌握技巧后也能拍出惊艳作品。本文将分享手机夜景拍摄的参数设置、构图技巧及实用小工具,助你轻松捕捉城市夜晚的璀璨与静谧。
Excel入门教程:从零开始学Excel
本教程带你从零开始学习Excel,了解界面组成、基本操作、数据输入与格式设置,轻松掌握Excel基础知识。
iOS系统设置:如何快速关闭后台应用刷新?
后台应用刷新会悄悄消耗电量和流量,其实iOS系统设置里就能轻松关闭。本文将教你一步步操作,还能了解关闭后的影响,让你的iPhone更省电!
PowerPoint动画优化:如何提升动画的流畅度和自然度?
动画效果不够流畅?不够自然?本文教你如何优化动画设置,让动画更加逼真和吸引人。
AE预设应用指南:快速打造专业级视频
想要快速打造专业级视频?AE预设应用来帮你!本文将详细介绍AE预设的使用方法,让你轻松应用各种预设效果,提升视频质量。
Android系统设置进阶:提升手机性能的秘诀
想要让Android手机运行更流畅?掌握这些系统设置进阶技巧,轻松提升手机性能,告别卡顿。
如何用AI工具快速生成短视频封面和标题?
AI工具能大幅提升短视频封面和标题的设计效率。本文介绍几款实用AI工具,助你快速生成高质量封面和标题。
Android 系统升级全攻略:让你的手机焕然一新
还在为 Android 系统升级而烦恼?本文为你提供多种升级方式,包括官方 OTA 升级、卡刷升级等,还有升级注意事项,让你的手机轻松升级。
Excel错误值处理的7个实用技巧
系统讲解Excel错误值的处理方案,涵盖#N/A、#DIV/0!、#VALUE!等常见错误的解决方法,提升公式稳定性。
OBS场景与来源优化:提升录屏直播质量
录屏直播质量不佳?可能是场景与来源设置有问题。本文将教你如何优化OBS的场景与来源设置,包括分辨率、帧率、音频质量等,让你的录屏直播更加清晰、流畅。