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

💡 推荐阅读

剪映模板素材哪里找?优质资源推荐

想要找到优质的剪映模板素材?本文为你推荐几个可靠的资源网站,让你轻松获取丰富多样的模板素材,提升视频制作水平。

手机进水后如何紧急处理?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的场景与来源设置,包括分辨率、帧率、音频质量等,让你的录屏直播更加清晰、流畅。