Pandas简明教程:八、Pandas数据透视表
透视表(pivot)是由微软发明的一个概念,1993年微软注册了PivotTable这一商标,而他们又在2020年正式撤销了注册。
关于透视表的话题随便搜搜就是一大堆,而有些地方可能都吹得很神了。透视表的不多说,我们直接通过Pandas中关于它的操作来认识。
1、透视表的基本操作方法
再次回到张三团伙的例子:
df月份 姓名 性别 应发工资 实发工资 职位
0 1 张三 男 2000 1500 主犯
1 2 张三 男 2000 1000 主犯
2 3 张三 女 2000 15000 主犯
3 4 张三 女 2000 1500 主犯
4 5 张三 女 2000 1500 主犯
5 2 李四 男 1800 1300 从犯
6 3 李四 男 1800 1300 从犯
7 4 李四 男 1800 1300 从犯
8 5 李四 男 1800 1300 从犯
9 1 王五 女 1800 1300 龙套
10 2 王五 女 1800 1300 龙套
11 3 王五 女 1800 1300 龙套
12 4 王五 女 1800 1300 龙套
这张表仔细看看,主要是记录了3个人几个月以来的收入情况,这就很像是公司员工的收入甚至于个人的收入了(比如把姓名一栏改成某个收入类目)。这样的表很详细,但也有缺点,那就是当我想看一些汇总的数据的时候,手动起来就很头痛了。于是我们先来看一个简单的例子:
df.pivot(index = '月份',columns = '姓名',values = '应发工资')姓名 张三 李四 王五
月份
1 2000.0 NaN 1800.0
2 2000.0 1800.0 1800.0
3 2000.0 1800.0 1800.0
4 2000.0 1800.0 1800.0
5 2000.0 1800.0 NaN
上面的代码返回的是这三个人按月的收入状况。其中王五在5月的收入是空,而回到原表可以发现的确没有他在这个月的收入情况。
如果我们把应用场景拉回到现实:原表即是每个员工每个月的收入,作为老板或者会计是不是就想看看员工的总收入情况。那么此时如果作为财务人员,一步就能取出老板想要看的东西。非常地方便!
由于这个对象太过重要,我们还是老实地看一遍官方文档的说明:
参数 | 说明 |
---|---|
index
|
str 或对象或str 列表
|
用于制作新框架索引的列。 如果为None,则使用现有索引。 | |
columns
|
str 或对象或str 列表
|
用于制作新框架列的列。 | |
values
|
str ,对象或先前列表(可选)
|
用于填充新框架值的列。 如果未指定,将使用所有剩余的列,并且结果将具有按层次结构索引的列。 | |
返回类型 | |
DataFrame。
|
返回调整后的DataFrame。
|
结果我们刚才的例子,index
被重新指定为“月份”,所以新表就是按列索引的。columns
是姓名,于是每个人的名字变成了列,最后values
被指定为“应发工资”。这一系列操作如果变成老板的需求就成了:
给我做一个每个人的月收入报表,只要应发工资。
如果没有感受到这种操作的便利,那就自己手动操作一下。
2、透视+统计
当然上述情况也只是其中一种,另外作为老板的我们可能也还想知道,除了详细情况以外,各员工的总收入是怎样的,于是
df.pivot(columns = '姓名',values = '实发工资').sum()姓名
张三 20500.0
李四 5200.0
王五 5200.0
dtype: float64
注意,由于我们这次是要计算总收入,所以索引就不能再是月份,直接默认就好。而此时如果非要加上索引,那么它也会消失。
df.pivot(index='月份',columns = '姓名',values = '实发工资').sum()姓名
张三 20500.0
李四 5200.0
王五 5200.0
dtype: float64
结果和上面一样。这是因为由于我们用了sum()
这个函数。它的本质是对values
进行操作,而此时values
被操作的维度刚好和index
一致,因此index
也就没有存在的必要了。
当然,结合上述实例我们也能想得到可以用类似的方法来查询最大值、最小值、平均值、中位数等等。具体的相关函数可以查看Pandas中DataFrame的属性及方法大全
3、透视表的本质
做到现在相信各位同学也都能多少有点感觉了。第一个例子中我们将index
和columns
分开,然后就变成了一张新表。如果我们用数组的观点来看的话,这两个东西其实刚好就代表数据的两个维度,每个对应位置的数据本身其实并没有发生变化。换言之,数据透视表其实就是将这种一维表变成二维表的过程。
回到第一例,我们仔细查看就不难发现,“月份”和“姓名”是两个完全独立的维度,它们自己有重复,但它们的组合并没有重复。那么这样的表,就可以很自然地做成透视表。
反之,如果不满足这个条件透视表就无从谈起,比如:
df.pivot(index = '月份',columns = '性别',values = '应发工资')
---------------------------------------------------------------------------ValueError: Index contains duplicate entries, cannot reshape
这时就报错说有重复的项存在。这里主要是“月份”和“性别”的组合对应得有相同的值,因此就无法对它们进行透视。
那么,在实际操作过程中,就要时刻想着作为index
和columns
的这两个维度的组合不存在重复值即可。
4、其它建议
上面的内容只是一个简单的介绍,要彻底弄明白透视表还得多多去练习,把更多的实例装进脑子才更容易融会贯通。这里我们找到一些讲得比较好的贴子供大家参考:
一文看懂pandas的透视表pivot_table
python pandas库——pivot使用心得
pandas.DataFrame.pivot — pandas 1.1.0 documentation
Python | Pandas.pivot() - GeeksforGeeks
本系列教程教程完整目录:
一、Pandas简介与安装
二、Pandas基本数据结构-DataFrame与Series
三、Pandas文件读写
四、Pandas数据索引方式
五、Pandas简单统计操作及通用方式
六、Pandas条件查询
七、Pandas缺失数据的处理(数据清洗基础)
八、Pandas数据透视表
九、表的合并、连接、拼接(数据聚合基础)
Pandas简明教程:八、Pandas数据透视表相关推荐
- 【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...
- Pandas实现(pivot_table函数)数据透视表
使用pandas中的pivot_table()实现数据透视表.语法格式如下: pd.pivot_table(data,values=None,index=None,columns=None,aggfu ...
- Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表
系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...
- 学习pandas数据透视表
1.excel中做数据透视表 1)步骤如下 ① 选中整个数据源: ② 依次点击"插入"-"数据透视表" ③ 选择在Excel中的哪个位置,插入数据透视表 ④ 然 ...
- 数据透视表汇总行在顶部显示_在数据透视表中比较顶部和底部销售
数据透视表汇总行在顶部显示 An Excel pivot table is a great way to summarize a large amount of data, and with its ...
- 用python做数据透视表
在Python中,可以使用pandas库来进行数据透视表的操作.下面是一个简单的示例代码: 假设有一个名为"sales_data.csv"的销售数据表格,其中包含了销售日期.销售员 ...
- excel数据透视表怎么做?ecxel数据透视功能讲解
数据透视表是 Microsoft Exce最强大的功能之一.它可以帮你快速从不同角度查看同一组数据.有了数据透视表,你不用创建复杂公式.整理它们的结果,就能找到一系列问题的答案了.下面这张数据表中,是 ...
- Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)
真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...
- Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)
文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...
最新文章
- java readline读取最后一行_java的转换流解析
- UEStudio使用技巧三则
- 手机单机游戏合集大概40个G
- 进程互斥的要求与实现方法
- Boost:每个连接处理的测试程序
- css_position
- 计算密集型服务 性能优化实战始末
- tensorflow2 tensorboard可视化使用
- 康乐主机系统怎么安装php,Kangle EP面板详细安装说明
- redis主从和集群搭建
- axure流程图模式_Axure原型设计:Axure原型加流程图功能的高效结合
- 沃特世推出SELECT SERIES MRT多反射飞行时间质谱平台,树立高分辨质谱性能新标杆
- intel服务器芯片组历史,Intel主板芯片组发展史.doc
- 绚丽彩虹同学录V1.4公测版
- 超市防盗止损人脸识别摄像头
- 常用的前端JavaScript方法封装
- ObjectMapper实现将Java对象转为json字符串
- 2021年保育员(中级)考试题及保育员(中级)考试报名
- 用华为手机拍照!要学会这4个功能,随手一拍都是单反大片
- python_matplotlib改变横坐标和纵坐标上的刻度(ticks)
热门文章
- mysql回收权限_mysql回收权限不成功,请问如何破?
- python埋点自动化_iOS自动化埋点的实现
- golang break label 与goto label
- 洛谷——P2590 [ZJOI2008]树的统计(树链剖分模板练手)
- Django之ORM使用以及模板语言
- python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法...
- MyBatis源码解析【4】反射和动态代理
- java笔试之字符串反转
- ZhuGongpu CloudX-for-Android
- 看服务器是不是虚拟机