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

Pandas数据透视表:交叉分析与聚合计算

大家好,在数据分析中,数据透视表(Pivot Table)是一种强大的工具,用于交叉分析和聚合计算。Pandas库中的数据透视表功能,使我们能够在多维数据中快速生成汇总表、统计特定维度的聚合数据,帮助揭示数据背后的信息。无论是计算销售额、求均值、还是筛选特定条件,Pandas的数据透视表都可以灵活应对。

1.数据透视表介绍

数据透视表是一种汇总数据的表格形式,允许基于多个维度对数据进行分组、聚合。它可以将大数据集中的行列信息重组并汇总,以揭示更有价值的分析结果。在Pandas中,数据透视表使用pivot_table函数实现,支持对数据进行灵活的统计和聚合。

数据透视表的结构:

  • 行索引(index):作为数据透视表的行标签。

  • 列索引(columns):作为数据透视表的列标签。

  • 值(values):用于填充透视表的汇总数据。

  • 聚合函数(aggfunc):用于汇总数据的计算方式,例如求和、计数、平均值等。

2.创建数据透视表的基本语法

在Pandas中,pivot_table函数是创建数据透视表的主要工具,其基本语法如下:

pd.pivot_table(data, index, columns=None, values=None, aggfunc='mean')
  • data:数据源DataFrame。

  • index:透视表的行索引。

  • columns:透视表的列索引。

  • values:需要计算的数据字段。

  • aggfunc:聚合函数(默认为mean),可以是sumcount等。

以下是一个示例数据集,用于演示数据透视表的使用方法:

import pandas as pd

# 创建示例数据
data = {
    '地区': ['北方', '南方', '北方', '南方', '北方', '南方'],
    '产品': ['A', 'A', 'B', 'B', 'C', 'C'],
    '销售量': [150, 200, 300, 400, 250, 300],
    '销售额': [1500, 2500, 3000, 4000, 2000, 3000]
}
df = pd.DataFrame(data)
print(df)

数据集包含四列,分别表示地区、产品、销售量和销售额。

3.基本数据透视表示例

可以使用数据透视表按产品分组,计算每种产品的平均销售量:

# 创建数据透视表
pivot = pd.pivot_table(df, index='产品', values='销售量', aggfunc='mean')
print(pivot)

结果如下所示:

       销售量
产品          
A     175.0
B     350.0
C     275.0

在这个示例中,pivot_table函数将产品作为行索引,计算每种产品的平均销售量。

4.多字段聚合计算

数据透视表支持对多个字段进行聚合计算,例如可以同时计算销售量销售额的平均值:

pivot = pd.pivot_table(df, index='产品', values=['销售量', '销售额'], aggfunc='mean')
print(pivot)

结果如下所示:

       销售量     销售额
产品                
A     175.0  2000.0
B     350.0  3500.0
C     275.0  2500.0

在这个示例中,将销售量销售额字段同时传入values参数,生成一个汇总表。

5.使用多重聚合函数

Pandas允许在数据透视表中使用多个聚合函数。例如,可以同时计算每种产品的销售量和销售额的总和与均值:

pivot = pd.pivot_table(df, index='产品', values=['销售量', '销售额'], aggfunc=['sum', 'mean'])
print(pivot)

结果如下所示:

         销售量           销售额        
          sum   mean    sum    mean
产品                                   
A        350.0  175.0  4000.0  2000.0
B        700.0  350.0  7000.0  3500.0
C        550.0  275.0  5000.0  2500.0

在这个示例中,使用aggfunc=['sum', 'mean'],同时计算了销售量和销售额的总和与均值。

6.多级索引的透视表

数据透视表支持多级索引(MultiIndex),可以按多个维度分组。以下示例展示了如何按地区产品分组,计算销售量的均值:

pivot = pd.pivot_table(df, index=['地区', '产品'], values='销售量', aggfunc='mean')
print(pivot)

结果如下所示:

        销售量
地区   产品       
北方   A    150.0
      B    300.0
      C    250.0
南方   A    200.0
      B    400.0
      C    300.0

在这个示例中,使用index=['地区', '产品']创建了一个具有多级索引的透视表,实现了按地区和产品的分组汇总。

7.添加列索引

除了多级行索引,还可以为数据透视表添加列索引。例如,按地区作为行索引、产品作为列索引,计算销售额的均值:

pivot = pd.pivot_table(df, index='地区', columns='产品', values='销售额', aggfunc='mean')
print(pivot)

结果如下所示:

产品       A      B       C
地区                         
北方   1500.0  3000.0  2000.0
南方   2500.0  4000.0  3000.0

在这个示例中,透视表以地区为行索引,产品为列索引,将销售额的均值填充到交叉表格中。

8.使用margins参数添加汇总行/列

pivot_table函数提供了margins参数,用于添加汇总行和汇总列,显示每个维度的总和或均值。

以下示例展示了如何计算各地区的销售总额:

pivot = pd.pivot_table(df, index='地区', columns='产品', values='销售额', aggfunc='sum', margins=True, margins_name='总计')
print(pivot)

结果如下所示:

产品        A      B      C      总计
地区                                
北方     1500.0  3000.0  2000.0  6500.0
南方     2500.0  4000.0  3000.0  9500.0
总计     4000.0  7000.0  5000.0 16000.0

在这个示例中,margins=True在透视表中添加了汇总行和汇总列,方便查看总销售额。

9.数据透视表中的数据筛选

在Pandas数据透视表中,可以使用筛选条件过滤数据。以下示例展示了如何在创建透视表时筛选出特定的产品:

pivot = pd.pivot_table(df[df['产品'] != 'B'], index='地区', values='销售量', aggfunc='sum')
print(pivot)

结果如下所示:

      销售量
地区        
北方    400
南方    500

在这个示例中,对原始数据进行了筛选,仅保留产品不是B的数据,创建了按地区分组的销售量总和透视表。

10.透视表与groupby的区别

  • pivot_table:适合需要交叉分析的场景,行列可以自由设置,并生成格式化的汇总表。

  • groupby:更适合处理分组聚合数据,可以通过链式操作进行灵活的计算。

以下是一个groupby操作与pivot_table的对比示例:

# 使用 groupby 计算每个地区和产品的销售量总和
grouped = df.groupby(['地区', '产品'])['销售量'].sum().unstack()
print(grouped)

结果如下所示:

产品       A      B      C
地区                     
北方   150.0  300.0  250.0
南方   200.0  400.0  300.0

在这个示例中,groupby分组后通过unstack()转换为类似透视表的格式。虽然groupby能实现类似的效果,但对于多级聚合和计算,pivot_table更直观,且具有自动添加汇总行/列的优势。

综上所述,Pandas的数据透视表为数据分析提供了一个强大且灵活的工具。通过pivot_table函数,可以轻松实现多维度的交叉分析和聚合计算,支持复杂的数据汇总、筛选和分组操作。数据透视表不仅适用于基本的求和、均值等简单统计,还能在多层次数据中揭示更深入的关系和趋势。在实际项目中,利用数据透视表可以更高效地挖掘数据价值,为数据分析提供有力支持。 


http://www.kler.cn/a/395479.html

相关文章:

  • Java中 LinkedList<>,ArrayDeque<>的区别 || Queue和Deque的区别
  • 认证鉴权框架SpringSecurity-1--概念和原理篇
  • 如何在CentOS 7上搭建SMB服务
  • 统信UOS开发接口DTK
  • 城市轨道交通数据可视化的应用与优势
  • 基于 Python Django 的二手房间可视化系统分析
  • 民锋科技量化模型助力衍生品市场的智能化决策
  • 智谱AI清影升级:引领AI视频进入音效新时代
  • 力扣.15 三数之和 three-sum
  • 英语每日一句
  • 【3D Slicer】的小白入门使用指南一
  • 无人机遥控器基础讲解——CKESC电调小课堂08
  • 【计算机网络】设备如何监听 ARP 请求广播
  • 本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程
  • WebRTC实现双端音视频聊天(Vue3 + SpringBoot)
  • 创建游戏云存档功能的完整指南
  • 2025年开考科目有哪些?
  • PostgreSQL 批量执行脚本
  • 用OMS进行 OceanBase 租户间数据迁移的测评
  • 【复盘笔记】国考25一期_套题8
  • 【UGUI】Unity 游戏开发:背包系统初始化道具教程
  • Android系统设置页面更改语言 权限 主题导致app崩溃
  • labview实现功能性全局变量
  • 华为三层交换机禁止VLAN间通讯(两种解决方案)
  • [AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码示例
  • 后仿真中的GLS测试用例的选取规则