透视表(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、透视表的本质

做到现在相信各位同学也都能多少有点感觉了。第一个例子中我们将indexcolumns分开,然后就变成了一张新表。如果我们用数组的观点来看的话,这两个东西其实刚好就代表数据的两个维度,每个对应位置的数据本身其实并没有发生变化。换言之,数据透视表其实就是将这种一维表变成二维表的过程

回到第一例,我们仔细查看就不难发现,“月份”和“姓名”是两个完全独立的维度,它们自己有重复,但它们的组合并没有重复。那么这样的表,就可以很自然地做成透视表。

反之,如果不满足这个条件透视表就无从谈起,比如:

df.pivot(index = '月份',columns = '性别',values = '应发工资')
---------------------------------------------------------------------------ValueError: Index contains duplicate entries, cannot reshape

这时就报错说有重复的项存在。这里主要是“月份”和“性别”的组合对应得有相同的值,因此就无法对它们进行透视。

那么,在实际操作过程中,就要时刻想着作为indexcolumns的这两个维度的组合不存在重复值即可。

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数据透视表相关推荐

  1. 【转载】使用Pandas创建数据透视表

    使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...

  2. Pandas实现(pivot_table函数)数据透视表

    使用pandas中的pivot_table()实现数据透视表.语法格式如下: pd.pivot_table(data,values=None,index=None,columns=None,aggfu ...

  3. Python数据分析——Pandas基础:dt.datetime与pivot_table()数据透视表

    系列文章目录 Chapter 1:创建与探索DF.排序.子集化:Python数据分析--Pandas基础入门+代码(一) Chapter 2:聚合函数,groupby,统计分析:Python数据分析- ...

  4. 学习pandas数据透视表

    1.excel中做数据透视表 1)步骤如下 ① 选中整个数据源: ② 依次点击"插入"-"数据透视表" ③ 选择在Excel中的哪个位置,插入数据透视表 ④ 然 ...

  5. 数据透视表汇总行在顶部显示_在数据透视表中比较顶部和底部销售

    数据透视表汇总行在顶部显示 An Excel pivot table is a great way to summarize a large amount of data, and with its ...

  6. 用python做数据透视表

    在Python中,可以使用pandas库来进行数据透视表的操作.下面是一个简单的示例代码: 假设有一个名为"sales_data.csv"的销售数据表格,其中包含了销售日期.销售员 ...

  7. excel数据透视表怎么做?ecxel数据透视功能讲解

    数据透视表是 Microsoft Exce最强大的功能之一.它可以帮你快速从不同角度查看同一组数据.有了数据透视表,你不用创建复杂公式.整理它们的结果,就能找到一系列问题的答案了.下面这张数据表中,是 ...

  8. Pandas简明教程:九、表的合并、连接、拼接(数据聚合基础)

    真实场景中常会遇到多种信息放在不同的表里的情况,此时我们就需要将这些表格的信息整合到一起.这种操作可以极大地减轻我们手动粘数据的工作,从而达到事半功倍的效果. 由于本篇要举的例子较多,因此直接采用官网 ...

  9. Pandas简明教程:七、Pandas缺失数据的处理(数据清洗基础)

    文章目录 1.缺失数据的类型 2.定位缺失数据 3.修改定位数据 4.批量修改缺失数据 5.数据修复的利器--插值法(`interpolate`) 本系列教程教程完整目录: 数据清洗的内容其实很丰富, ...

最新文章

  1. java readline读取最后一行_java的转换流解析
  2. UEStudio使用技巧三则
  3. 手机单机游戏合集大概40个G
  4. 进程互斥的要求与实现方法
  5. Boost:每个连接处理的测试程序
  6. css_position
  7. 计算密集型服务 性能优化实战始末
  8. tensorflow2 tensorboard可视化使用
  9. 康乐主机系统怎么安装php,Kangle EP面板详细安装说明
  10. redis主从和集群搭建
  11. axure流程图模式_Axure原型设计:Axure原型加流程图功能的高效结合
  12. 沃特世推出SELECT SERIES MRT多反射飞行时间质谱平台,树立高分辨质谱性能新标杆
  13. intel服务器芯片组历史,Intel主板芯片组发展史.doc
  14. 绚丽彩虹同学录V1.4公测版
  15. 超市防盗止损人脸识别摄像头
  16. 常用的前端JavaScript方法封装
  17. ObjectMapper实现将Java对象转为json字符串
  18. 2021年保育员(中级)考试题及保育员(中级)考试报名
  19. 用华为手机拍照!要学会这4个功能,随手一拍都是单反大片
  20. python_matplotlib改变横坐标和纵坐标上的刻度(ticks)

热门文章

  1. mysql回收权限_mysql回收权限不成功,请问如何破?
  2. python埋点自动化_iOS自动化埋点的实现
  3. golang break label 与goto label
  4. 洛谷——P2590 [ZJOI2008]树的统计(树链剖分模板练手)
  5. Django之ORM使用以及模板语言
  6. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法...
  7. MyBatis源码解析【4】反射和动态代理
  8. java笔试之字符串反转
  9. ZhuGongpu CloudX-for-Android
  10. 看服务器是不是虚拟机