Pandas高效操作:数据分组与聚合的实战指南

面对大量数据,如何快速提取有价值的信息?Pandas的数据分组与聚合功能来帮忙。本文将通过实战案例,教你如何高效进行数据分组与聚合。

468 × 60 文章顶部广告 QEG44JER

引言 / 什么是数据分组与聚合

在数据分析工作中,我们经常需要面对海量数据,如何从这些数据中快速提取有价值的信息是关键。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提供了多种聚合方法:

  1. 基本聚合函数
    • sum(): 求和
    • mean(): 平均值
    • max(): 最大值
    • min(): 最小值
    • count(): 计数
    • std(): 标准差

让我们计算每个地区的销售总额和平均销售额:

region_sales = df.groupby('地区')['销售额'].agg(['sum', 'mean'])
print(region_sales)

输出结果:

       sum    mean
地区               
北京   3100  1033.333333
上海   5300  1766.666667
  1. 多列聚合

我们也可以同时对多列进行不同的聚合计算:

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中数据分组与聚合的核心操作,包括:

  1. 使用groupby()函数进行单列或多列分组
  2. 对分组数据进行各种聚合计算(sum、mean、max等)
  3. 高级技巧如自定义聚合函数、分组后筛选数据
  4. 常见问题的解决方案

掌握这些技巧后,你可以轻松处理各种数据分析场景,如:

  • 计算不同时间段的销售趋势
  • 分析不同用户群体的行为特征
  • 比较不同产品的市场表现

建议读者在实际项目中多加练习,熟练掌握这些操作将大大提高你的数据分析效率。

468 × 60 文章底部广告 7XM2LNHL

💡 推荐阅读

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编辑中不可或缺的命令。本文将全面介绍这两个命令的实用技巧,助你轻松应对各种图形编辑需求。