当前位置: 首页 > news >正文

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

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

0. 基本介绍

groupby分组聚合

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

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

基本用法

import pandas as pddf = 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 pddf = 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 的一种结构化输出形式。理解它们的差异后,可以根据具体需求灵活选择或组合使用。

相关文章:

  • R1快开门式压力容器操作考试的实操技能考试有哪些注意事项?
  • 多品种与多时间框架策略跨市场交易的实现
  • 高效处理CR
  • RDD的自定义分区器-案例
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 在线打开Word文件,并用前端对话框实现填空填表
  • 自然语言处理 (NLP) 技术发展:从规则到大型语言模型的演进之路
  • 增强学习(Reinforcement Learning)简介
  • 机械臂柔顺控制:阻抗控制、导纳控制和力位混合控制
  • 户用/工商业/高压系统防逆流装置选型指南‌
  • Docker的基础操作
  • SIGIR 2025端到端生成式推荐ETEGRec
  • vue3源代码装包,启动服务
  • 支付宝 SEO 优化:提升小程序曝光与流量的完整指南
  • Go语言的宕机恢复,如何防止程序奔溃
  • 污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代
  • 从 JMS 到 ActiveMQ:API 设计与扩展机制分析(一)
  • Uniapp app 安卓手机(红米)自定义基座进行真机调试
  • 什么是供应链关键业务指标体系,如何利用指标驱动管理闭环
  • 解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题
  • 数据库插入数据时自动生成
  • 工行回应两售出金条疑似有杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 中日有关部门就日本水产品输华问题进行第三次谈判,外交部回应
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长
  • 毕赣新作《狂野时代》入围戛纳主竞赛单元,易烊千玺舒淇主演
  • 人民日报整版调查:中小学春秋假,如何放得好推得开?
  • 潘功胜发布会答问五大要点:除了降准降息,这些政策“含金量”也很高