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
),可以是sum
、count
等。
以下是一个示例数据集,用于演示数据透视表的使用方法:
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
函数,可以轻松实现多维度的交叉分析和聚合计算,支持复杂的数据汇总、筛选和分组操作。数据透视表不仅适用于基本的求和、均值等简单统计,还能在多层次数据中揭示更深入的关系和趋势。在实际项目中,利用数据透视表可以更高效地挖掘数据价值,为数据分析提供有力支持。
相关文章:
Pandas数据透视表:交叉分析与聚合计算
大家好,在数据分析中,数据透视表(Pivot Table)是一种强大的工具,用于交叉分析和聚合计算。Pandas库中的数据透视表功能,使我们能够在多维数据中快速生成汇总表、统计特定维度的聚合数据,帮助揭示…...
软件设计师考试大纲
文章目录 一 、考 试 说 明1. 考试目标2. 考试要求3. 考试科目设置 二、考 试 范 围考试科目1:计算机与软件工程知识1. 计算机系统基础知识1.1计算机内数据的表示及运算1.2 其他数学基础知识1.3 计算机硬件基础知识1.3.1 计算机系统的组成、体系结构分类及特性1.3.2 存储系统1.…...
一文说清C++类型转换操作符(cast operator)
一 前言 大家在编程时,一定会遇到要做类型转换的应用场景。 但是,C风格的类型转换太强大,太危险,它允许将一个给定类型转换成我们想要的任何其他类型。 所以在C中,提供了一些更安全和更明确的类型转换操作符ÿ…...

MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析
1、前言 在介绍,在进行MOSFET相关的电路设计时,可能会遇到MOSFET误导通的问题,为了解决此问题,我们提出了两种方法,一种是增大MOSFET栅极串联电阻的阻值,另外一种是在MOSFET栅-源极之间并联一个电容&#…...
gitHub常用操作
gitHub常用操作 1、把项目拉下来2、添加上游仓库3、进入分支4、从上游仓库拉取更新 1、把项目拉下来 在对应项目的右上角点击fork,fork下来:将远程仓库复制到个人仓库 在创建好的分支文件夹下使用 git clone自己远程仓库下的http地址(fork…...

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
YOLOv5是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv5具有更高的…...

Java 垃圾回收机制(GC)概览
简介 Java垃圾收集、堆和运行时编译器默认选择 jdk1.9开始,默认使用G1收集器,GC Threads的最大数量受堆大小和可用CPU资源限制初始堆大小为物理内存的1/64最大堆大小为物理内存的1/4分层编译器,同时使用C1和C2 JVM 垃圾收集器可以为配置优…...

Kafka节点服役和退役
1 服役新节点 1)新节点准备 (1)关闭 bigdata03,进行一个快照,并右键执行克隆操作。 (2)开启 bigdata04,并修改 IP 地址。 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完…...
Git如何简单使用
文章目录 GitGitlabGitLab和GitHub有什么区别?Gitlab简单使用Gitlab常用指令Git Git是一个分布式版本控制系统。 它用于记录文件的修改历史,方便多人协作开发软件等项目。例如一个软件开发团队,成员们会频繁修改代码,Git可以追踪每个人的修改内容、时间等信息。 主要功能…...

酒水分销积分商城小程序开发方案php+uniapp
酒水分销积分商城小程序开发,开发语言后端php,前端uniapp。核心功能模块:酒水商城、积分商城、二级分销、抽奖、优惠券。可以二开或定制。协助部署搭建。...
MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)
MTU(最大传输单元,Maximum Transmission Unit)是网络中用于表示数据链路层或网络接口上能够传输的最大数据包大小。 1. 工作原理 MTU 决定了一个数据包(包括头部和数据部分)的最大长度。它影响到数据的传输ÿ…...
React的基础API介绍(一)
目录 useEffect1. 替代生命周期方法2. 副作用管理3. 依赖项数组4. 多次使用5. 与闭包配合6. 支持异步操作7. 减少样板代码 注意事项useEffetct是如何拿到变量count最新的值?1. 每次渲染都会创建新的函数作用域2. 闭包捕获最新的状态值3. useEffect 的执行时机 useLa…...
【Electron】总结:如何创建Electron+Element Plus的项目
我将结合官网手册与AI问到的信息,直接给出步骤,与命令。 一、准备环境 首先在C盘Users,你的登录的账号名文件夹下,编辑.npmrc文件。添加镜像地址。 如果使用了yarn,则是.yarnrc。可以全部都配置。 npm install -g …...

从依托指标字典到 NoETL 自动化指标平台,指标口径一致性管理的进阶
今天,我们一起来梳理和盘点下不同代际指标平台如何实现指标口径一致性管理: 第一代:指标口径登记与管理 第一代指标平台聚焦于指标口径的登记与管理,依托指标字典实现企业指标口径的有效检索与管理功能。 此阶段,业…...
嵌入式面试题练习 - 2024/11/15
欢迎找我进行职业规划,超值的自我投资 -> 嵌入式软件工程师一对一指导 1.设有定义char *p[]{"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是() A *p[1] 3 B *(p[1] 3) C *(p[3] 1) D p[3] […...

分析http话术异常挂断原因
用户反馈在与机器人通话时,自己明明有说话,但是通话还是被挂断了,想知道原因。 分析日志 我们根据用户提供的freeswitch日志分析:发现是因为超时导致话术执行hangup动作,结束了通话。 从这一行向上分析日志ÿ…...

云岚到家 秒杀抢购
目录 秒杀抢购业务特点 常用技术方案 抢券 抢券界面 进行抢券 我的优惠券列表 活动查询 系统设计 活动查询分析 活动查询界面显示了哪些数据? 面向高并发如何提高活动查询性能? 如何保证缓存一致性? 数据流 Redis数据结构设计 如…...

【WPF】Prism库学习(一)
Prism介绍 1. Prism框架概述: Prism是一个用于构建松耦合、可维护和可测试的XAML应用程序的框架。它支持WPF、.NET MAUI、Uno Platform和Xamarin Forms等多个平台。对于每个平台,Prism都有单独的发布版本,并且它们在不同的时间线上独立开发。…...
0 -vscode搭建python环境教程参考(windows)
引用一篇非常详细的vscode搭建python环境教程 链接:vscode安装以及配置Python基本环境 以下是VSCode和PyCharm的对比 个人更建议使用VSCode Visual Studio Code (VSCode) Visual Studio Code 是由微软开发的一款免费、开源的轻量级代码编辑器。它支持多种编程语…...

Uniapp 引入 Android aar 包 和 Android 离线打包
需求: 原生安卓 apk 要求嵌入到 uniapp 中,并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你,从 apk 到 aar,以及打包冲突到如何运行,期间我所遇到的问题都会 一 一 进行说明,相关版本以我文章内为…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...