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

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.0B    300.0C    250.0
南方   A    200.0B    400.0C    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.lryc.cn/news/484986.html

相关文章:

  • 软件设计师考试大纲
  • 一文说清C++类型转换操作符(cast operator)
  • MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析
  • gitHub常用操作
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • Java 垃圾回收机制(GC)概览
  • Kafka节点服役和退役
  • Git如何简单使用
  • 酒水分销积分商城小程序开发方案php+uniapp
  • MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)
  • React的基础API介绍(一)
  • 【Electron】总结:如何创建Electron+Element Plus的项目
  • 从依托指标字典到 NoETL 自动化指标平台,指标口径一致性管理的进阶
  • 嵌入式面试题练习 - 2024/11/15
  • 分析http话术异常挂断原因
  • 云岚到家 秒杀抢购
  • 【WPF】Prism库学习(一)
  • 0 -vscode搭建python环境教程参考(windows)
  • Uniapp 引入 Android aar 包 和 Android 离线打包
  • 10款高效音频剪辑工具,让声音编辑更上一层楼。
  • Javascript——设计模式(一)
  • Hybird和WebView
  • c++实现中缀表达式 转换为后缀表达式
  • Cisco FMC重置SmartLicense到Evaluatin mode步骤
  • 多表查询综合归纳
  • 【5.线性表-链式表示-王道课后算法题】
  • 存储过程及练习
  • 【在Linux世界中追寻伟大的One Piece】多路转接epoll
  • 设计模式-参考的雷丰阳老师直播课
  • Python +Pyqt5 简单视频爬取学习(一)