pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?

news2025/5/10 21:59:02

pivot_tablegroupby 是 pandas 中两种常用的数据聚合方法,它们都能实现数据分组和汇总,但在使用方式和输出结构上有显著区别。

0. 基本介绍

groupby分组聚合

groupby 是 Pandas 库中的一个功能强大的方法,用于根据一个或多个列对数据进行分组,并对每个分组执行聚合操作。它通常与聚合函数(如 sum、mean、count 等)一起使用,以便对分组后的数据进行统计分析。

工作逻辑:“拆分-应用-合并”:它按照某些条件将数据分组,然后对每组应用函数,最后将结果合并。

基本用法

import pandas as pd

df = pd.DataFrame({
    '城市': ['北京', '上海', '北京', '上海', '北京', '上海'],
    '月份': ['1月', '1月', '2月', '2月', '3月', '3月'],
    '销售额': [100, 200, 150, 250, 120, 230]
})

在这里插入图片描述

# 按城市分组计算平均销售额
avg_sales = df.groupby('城市')['销售额'].mean()

在这里插入图片描述

# 按城市和月份两级分组
grouped = df.groupby(['城市', '月份'])['销售额'].sum()

在这里插入图片描述

# 同时计算总和、平均值和最大值
result = df.groupby('城市')['销售额'].agg(['sum', 'mean', 'max']).round(2)

在这里插入图片描述

# 定义计算极差的函数
def range_func(x):
    return x.max() - x.min()

result = df.groupby('城市')['销售额'].agg(range_func).to_frame("Range")

在这里插入图片描述

pivot_table数据透视表

pivot 英/ˈpɪvət/
n.支点;中心;枢轴;核心;中心点;最重要的人(或事物)

pivot_table创建电子表格风格的数据透视表,可以看作是多维的groupby操作,但提供了更直观行列交叉分析能力。

基本用法

import pandas as pd

df = pd.DataFrame({
    '城市': ['北京', '上海', '北京', '上海', '北京', '上海'],
    '月份': ['1月', '1月', '2月', '2月', '3月', '3月'],
    '销售额': [100, 200, 150, 250, 120, 230]
})

# 创建简单的透视表
pivot = pd.pivot_table(df, 
                      values='销售额', 
                      index='城市', 
                      columns='月份', 
                      aggfunc='sum')
多维度分析
# 假设数据有更多维度
df['产品线'] = ['A', 'B', 'A', 'B', 'A', 'B']

# 多维度透视
pivot = pd.pivot_table(df, 
                      values='销售额', 
                      index=['城市'], 
                      columns=['月份', '产品线'], 
                      aggfunc='sum',
                      fill_value=0)
多个聚合函数
# 同时使用多个聚合函数
pivot = pd.pivot_table(df, 
                      values='销售额', 
                      index='城市', 
                      columns='月份', 
                      aggfunc=['sum', 'mean', 'count'])
#添加汇总行/列
pivot = pd.pivot_table(df, 
                      values='销售额', 
                      index='城市', 
                      columns='月份', 
                      aggfunc='sum',
                      margins=True,  # 添加汇总
                      margins_name='总计')

1. 输出结构的差异

特性groupbypivot_table
默认输出格式返回 Series 或多层索引的 DataFrame直接返回二维表格形式的 DataFrame
行列结构结果可能包含多层索引(不易直观阅读)自动生成行列交叉的表格(类似Excel透视表)
可视化友好度需额外处理才能用于图表直接支持热力图、柱状图等可视化

示例对比
示例数据
在这里插入图片描述
groupby

# groupby 输出(多层索引Series)
df.groupby(['Region', 'Product'])['Sales'].sum()

在这里插入图片描述
pivot_table

# pivot_table 输出(二维表格)
pd.pivot_table(df, 
			values='Sales', 
			index='Region', 
			columns='Product', 
			aggfunc='sum')

在这里插入图片描述


2. 功能侧重点不同

groupbypivot_table
更适合编程化的数据处理流程更适合生成人类可读的汇总报表
支持更复杂的链式操作(如apply专注于行列交叉的聚合展示
灵活性更高,可自定义分组逻辑结构化更强,适合标准化分析场景

3. 多维分析能力

  • groupby 虽然可以通过多列分组实现多维分析,但结果需要手动处理才能清晰展示:

    df.groupby(['Region', 'Product', 'Date'])['Sales'].sum().unstack("Product")
    

    在这里插入图片描述

  • pivot_table 原生支持多维交叉分析,通过 indexcolumns 参数直观控制:

    pd.pivot_table(df, values='Sales', 
                  index=['Region', 'Date'], 
                  columns='Product', 
                  aggfunc='sum')
    

    在这里插入图片描述


4. 实际应用场景选择

优先使用 groupby 当:
  • 需要灵活的分组后操作(如过滤、转换)
  • 进行复杂的分组计算(如滚动统计、自定义聚合)
  • 数据需要进一步管道式处理(method chaining
优先使用 pivot_table 当:
  • 快速生成业务报表或可视化数据
  • 需要直观对比行列维度关系
  • 处理类似Excel透视表的需求

5. 性能对比

  • 简单聚合场景下性能相近
  • 复杂多维分析时,pivot_table 对内存更友好(自动处理行列展开)
  • groupby 在链式操作中可能更高效(避免中间结果生成)

两者本质都是分组聚合,但 pivot_tablegroupby 的一种结构化输出形式。理解它们的差异后,可以根据具体需求灵活选择或组合使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对golang中CSP的理解

概念: CSP模型,即通信顺序进程模型,是由英国计算机科学家C.A.R. Hoare于1978年提出的。该模型强调进程之间通过通道(channel)进行通信,并通过消息传递来协调并发执行的进程。CSP模型的核心思想是“不要通过…

【LunarVim】CMake LSP配置

在 LunarVim 中为 CMakeLists.txt 文件启用代码提示(如补全和语义高亮),需要安装支持 CMake 的 LSP(语言服务器)和适当的插件。以下是完整配置指南: 1、配置流程 1.1 安装cmake-language-server 通过 Ma…

Mkdocs页面如何嵌入PDF

嵌入PDF 嵌入PDF代码 &#xff0c;注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码&#xff1a; <d…

融合静态图与动态智能:重构下一代智能系统架构

引言&#xff1a;智能系统的分裂 当前的大模型系统架构正处于两个极端之间&#xff1a; 动态智能体系统&#xff1a;依赖语言模型动态决策、自由组合任务&#xff0c;智能灵活但稳定性差&#xff1b; 静态流程图系统&#xff1a;具备强工程能力&#xff0c;可控可靠&#xf…

WORD压缩两个免费方法

日常办公和学习中&#xff0c;Word文档常常因为包含大量图片、图表或复杂格式而导致文件体积过大&#xff0c;带来诸多不便&#xff0c;比如 邮件发送受限&#xff1a;许多邮箱附件限制在10-25MB&#xff0c;大文件无法直接发送 存储空间占用&#xff1a;大量文档占用硬盘或云…

skywalking服务安装与启动

skywalking服务安装并启动 1、介绍2、下载apache-skywalking-apm3、解压缩文件4、创建数据库及用户5、修改配置文件6、下载 MySQL JDBC 驱动7、启动 OAP Serve,需要jkd11,需指定jkd版本,可以修改文件oapService.sh8、启动 Web UI,需要jkd11,需指定jkd版本,可以修改文件oapServi…

Qt 中信号与槽(signal-slot)机制支持 多种连接方式(ConnectionType)

Qt 中信号与槽&#xff08;signal-slot&#xff09;机制支持 多种连接方式&#xff08;ConnectionType&#xff09; Qt 中信号与槽&#xff08;signal-slot&#xff09;机制支持 多种连接方式&#xff08;ConnectionType&#xff09;&#xff0c;用于控制信号发出后如何调用槽…

Midjourney-V7:支持参考图片头像或背景生成新保真图

Midjourney-V7重磅升级Omni Reference&#xff1a;全能图像参考神器&#xff01;再也不用担心生成图片货不对版了&#xff01; 就在上周&#xff0c;Midjourney发版它最新的V7版本&#xff1a;Omini Reference&#xff0c;提供了全方位图像参考功能&#xff0c;它可以参考你提…

耀圣-气动带刮刀硬密封法兰球阀:攻克颗粒高粘度介质的自清洁 “利器”

气动带刮刀硬密封法兰球阀&#xff1a;攻克颗粒高粘度介质的自清洁 “利器” 在化工、矿业、食品加工等行业中&#xff0c;带颗粒高粘度介质、料浆及高腐蚀性介质的输送与控制一直是行业难题。普通阀门极易因介质附着、颗粒堆积导致卡阻失效&#xff0c;密封面磨损加剧&#x…

Google云计算原理和应用之分布式锁服务Chubby

Chubby是Google设计的提供粗粒度锁服务的一个文件系统,它基于松耦合分布式系统,解决了分布的一致性问题。通过使用Chubby的锁服务,用户可以确保数据操作过程中的一致性。不过值得注意的是,这种锁只是一种建议性的锁(Advisory Lock)而不是强制性的锁,这种选择系统具有更大…

SM2Utils NoSuchMethodError: org.bouncycastle.math.ec.ECFieldElement$Fp.<init

1&#xff0c;报错图示 2&#xff0c;报错原因&#xff1a; NoSuchMethodError 表示运行时找不到某个方法&#xff0c;通常是编译时依赖的库版本与运行时使用的库版本不一致。 错误中的 ECFieldElement$Fp. 构造函数参数为 (BigInteger, BigInteger)&#xff0c;说明代码期望使…

《100天精通Python——基础篇 2025 第16天:异常处理与调试机制详解》

目录 一、认识异常1.1 为什么要使用异常处理机制?1.2 语法错误1.3 异常错误1.4 如何解读错误信息 二、异常处理2.1 异常的捕获2.2 Python内置异常2.3 捕获多个异常2.4 raise语句与as子句2.5 使用traceback查看异常2.6 try…except…else语句2.7 try…except…finally语句--捕获…

动态创建链表(头插法、尾插法)

今天我们来学习动态创建链表&#xff01;&#xff01;&#xff01; 动态创建链表&#xff1a;分为头插法和尾插法 头插法&#xff08;动态创建&#xff09;&#xff1a; 头插法就是让新节点变成头 代码如下 吐血了&#xff1a;这边有个非常重要的知识点&#xff0c;这边第三…

利用混合磁共振成像 - 显微镜纤维束成像技术描绘结构连接组|文献速递-深度学习医疗AI最新文献

Title 题目 Imaging the structural connectome with hybrid MRI-microscopy tractography 利用混合磁共振成像 - 显微镜纤维束成像技术描绘结构连接组 01 文献速递介绍 通过多种模态绘制大脑结构能够增进我们对大脑功能、发育、衰老以及疾病的理解&#xff08;汉森等人&am…

安全监控之Linux核心资产SSH连接监测邮件

文章目录 一、引言二、邮箱设置三、脚本配置四、登录测试 一、引言 在某些特殊时期&#xff08;如HVV&#xff09;需要重点监控Linux核心资产SSH连接登录活动情况&#xff0c;实现ssh登录报警监控。其实实现方式并不难。 二、邮箱设置 在邮箱中需要启用“SMTP”协议&#xf…

文旅田园康养小镇规划设计方案PPT(85页)

1. 项目背景与定位 背景&#xff1a;位于长三角经济圈&#xff0c;依托安吉丰富的自然与文化资源&#xff0c;旨在打造集康养、度假、文化体验于一体的综合小镇。 定位&#xff1a;成为浙北地区知名的康养旅游目的地&#xff0c;融合“一溪两岸”规划理念&#xff0c;实现全面…

【Linux操作系统】第一弹——Linux基础篇

文章目录 &#x1f4a1; 一. Linux的基本常识&#x1fa94; 1.1 linux网络连接三种方式&#x1fa94;1.2 虚拟机的克隆&#x1fa94;1.3 虚拟机的快照&#x1fa94;1.4 虚拟机的迁移和删除&#x1fa94;1.5 vmtools工具 &#x1f4a1;二. Linux的目录结构&#x1fa94;2.1 Linu…

vue3: pdf.js 2.16.105 using typescript

npm create vite vuepdfpreview //创建项目npm install vue-pdf-embed npm install vue3-pdfjs npm install pdfjs-dist2.16.105 <!--* |~~~~~~~|* | |* | |…

从 MDM 到 Data Fabric:下一代数据架构如何释放 AI 潜能

从 MDM 到 Data Fabric&#xff1a;下一代数据架构如何释放 AI 潜能 —— 传统治理与新兴架构的范式变革与协同进化 引言&#xff1a;AI 规模化落地的数据困境 在人工智能技术快速发展的今天&#xff0c;企业对 AI 的期望已从 “单点实验” 转向 “规模化落地”。然而&#…

【软件测试】测试用例的设计方法

目录 一、基于需求进行测试用例的设计 1.1 功能需求测试分析 二、黑盒测试用例设计方法 2.1 等价类划分法(解决穷举) 2.1.1 等价类设计步骤 2.1.2 等价类划分法案例 2.1.2.1 验证 QQ 账号的合法性 2.1.2.2 验证某城市电话号码的正确性 2.1.3 适用场景 2.2 边界值分析…