Pandas透视表(pivot_table)详解

Pandas透视表(pivot_table)详解

介绍

对比在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为pivot_table。pivot_table非常有用,但是为了输出所需要的内容,经常需要记住它的使用语法。所以,本文将重点解释pandas中的函数pivot_table,并教大家如何使用它来进行数据分析。

数据

使用pandas中pivot_table前你需要确保已理解了你的数据,并清楚地知道想通过透视表解决什么问题。其实,虽然pivot_table看起来只是一个简单的函数,但是它能够快速地对数据进行强大的分析。

在本文中,我们将会跟踪一个数据分析师的招聘数据。

典型的问题包括:
各城市的平均薪资是多少?
教育水平是否对薪资分布有影响?
工作经验是否对薪资分布有影响?

肯定有人会将数据导出到Excel,并使用一个透视表工具来总结这些数据。

使用Pandas透视表将是一个不错的选择,应为它有以下优点:

更快(一旦设置之后)
自行说明(通过查看代码,你将知道它做了什么)
易于生成报告或电子邮件
更灵活,因为你可以定义定制的聚合函数

首先,让我们搭建所需的环境。
Pandas透视表(pivot_table)详解

然后,将我们销售渠道的数据读入到数据帧中。
Pandas透视表(pivot_table)详解

处理数据

建立数据透视表,我觉得最容易的方法就是一步一个脚印地进行。为了得到期望的结果,就不要害怕处理顺序和变量的繁琐。

最简单的透视表必须有一个数据帧和一个索引。在本例中,我们将使用"city(城市)“列作为我们的索引。
Pandas透视表(pivot_table)详解
此外,你也可以有多个索引。实际上,大多数的pivot_table参数可以通过列表获取多个值。
Pandas透视表(pivot_table)详解
可以看到,透视表比较智能,它已经开始通过将"city”、"education"和“workYear”列进行对应分组,来实现数据聚合和总结。那么现在,就让我们共同看一下数据透视表可以为我们做些什么吧。

为此,"companyId"和"positionId"列对于我们来说并没什么用。所以,通过利用利用“values”域显式地定义我们关心的列,就可以实现移除那些不关心的列。
Pandas透视表(pivot_table)详解
"avgSalary"列会自动计算数据的平均值mean,但是我们也可以对该列元素进行计数或求和。要添加这些功能,使用aggfunc就很容易实现。
Pandas透视表(pivot_table)详解
aggfunc可以包含很多函数,下面就让我们尝试一种方法,即使用numpy中的函数mean和len来进行计数。
Pandas透视表(pivot_table)详解
如果我们想通过不同维度来分析薪资情况,那么变量"columns"将允许我们定义一个或多个列。

我认为pivot_table中一个令人困惑的地方是"columns(列)"和"values(值)“的使用。记住,变量"values” 它相当于Excel透视表里的数值,变量“columns” 它相当于Excel透视表里的列标签。
Pandas透视表(pivot_table)详解
然而,聚合函数aggfunc最后是被应用到了变量"values"中你所列举的项目上。
Pandas透视表(pivot_table)详解
然而,非数值(NaN)有点令人分心。如果想移除它们,我们可以使用“fill_value”将其设置为0。
Pandas透视表(pivot_table)详解
如果我想查看一些总和数据该怎么办呢? “margins=True” 就可以帮我们实现这种功能。
Pandas透视表(pivot_table)详解
一个很方便的特性是,为了对你选择的不同值执行不同的函数,你可以向aggfunc传递一个字典。不过,这样做有一个副作用,那就是必须将标签做的更加简洁才行。
Pandas透视表(pivot_table)详解
此外,也可以提供一系列的聚合函数,并将它们应用到"values"中的每个元素上。
Pandas透视表(pivot_table)详解
也许,同一时间将这些东西全都放在一起会有点令人望而生畏,但是一旦你开始处理这些数据,并一步一步地添加新项目,你将能够领略到它是如何工作的。一般的经验法则是,一旦你使用多个“grouby”,那么你需要评估此时使用透视表是否是一种更好的选择。

高级透视表过滤

一旦你生成了需要的数据,那么数据将存在于数据帧中。所以,你可以使用自定义的标准数据帧函数来对其进行过滤。
如果你只想查看其中一个城市(例如上海)的数据,可以这样:
Pandas透视表(pivot_table)详解
我们可以查看所有本科和硕士学历的总薪资情况,代码如下所示:
Pandas透视表(pivot_table)详解
这是pivot_table中一个很强大的特性,所以一旦你得到了你所需要的pivot_table格式的数据,就不要忘了此时你就拥有了pandas的强大威力。