Pandas透视表(pivot_table)详解

介绍

也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个相似的功能,名为pivot_table。虽然pivot_table很是有用,可是我发现为了格式化输出我所须要的内容,常常须要记住它的使用语法。因此,本文将重点解释pandas中的函数pivot_table,并教你们如何使用它来进行数据分析。html

若是你对这个概念不熟悉,wikipedia上对它作了详细的解释。顺便说一下,你知道微软为PivotTable(透视表)注册了商标吗?其实之前我也不知道。不用说,下面我将讨论的透视表并非PivotTable。python

做为一个额外的福利,我建立了一个总结pivot_table的简单备忘单。你能够在本文的最后找到它,我但愿它可以对你有所帮助。若是它帮到了你,请告诉我。git

数据

使用pandas中pivot_table的一个挑战是,你须要确保你理解你的数据,并清楚地知道你想经过透视表解决什么问题。其实,虽然pivot_table看起来只是一个简单的函数,可是它可以快速地对数据进行强大的分析。github

在本文中,我将会跟踪一个销售渠道(也称为漏斗)。基本的问题是,一些销售周期很长(能够想一下“企业软件”、“资本设备”等),而管理者想更详细地了解它一全年的状况。函数

典型的问题包括:工具

  • 本渠道收入是多少?
  • 渠道的产品是什么?
  • 谁在什么阶段有什么产品?
  • 咱们年末前结束交易的可能性有多大?

不少公司将会使用CRM工具或者其余销售使用的软件来跟踪此过程。虽然他们可能拥有有效的工具对数据进行分析,但确定有人须要将数据导出到Excel,并使用一个透视表工具来总结这些数据。url

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

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

Read in the data

首先,让咱们搭建所需的环境。excel

若是你想跟随我继续下去,那么能够下载这个Excel文件。code

版本提醒

由于Pivot_table API已经随着时间有所改变,因此为了使本文中示例代码可以正常工做,请确保你安装了最近版本的Pandas(>0.15)。本文示例还用到了category数据类型,而它也须要确保是最近版本。

首先,将咱们销售渠道的数据读入到数据帧中。

为方便起见,咱们将上表中“Status”列定义为category,并按咱们想要的查看方式设置顺序。

其实,并不严格要求这样作,但这样作可以在分析数据的整个过程当中,帮助咱们保持所想要的顺序。

 

处理数据

既然咱们创建数据透视表,我以为最容易的方法就是一步一个脚印地进行。添加项目和检查每一步来验证你正一步一步获得指望的结果。为了查看什么样的外观最能知足你的须要,就不要惧怕处理顺序和变量的繁琐。

最简单的透视表必须有一个数据帧和一个索引。在本例中,咱们将使用“Name(名字)”列做为咱们的索引。

此外,你也能够有多个索引。实际上,大多数的pivot_table参数能够经过列表获取多个值。

这样颇有趣但并非特别有用。咱们可能想作的是经过将“Manager”和“Rep”设置为索引来查看结果。要实现它其实很简单,只须要改变索引就能够。

能够看到,透视表比较智能,它已经开始经过将“Rep”列和“Manager”列进行对应分组,来实现数据聚合和总结。那么如今,就让咱们共同看一下数据透视表能够为咱们作些什么吧。

为此,“Account”和“Quantity”列对于咱们来讲并没什么用。因此,经过利用“values”域显式地定义咱们关心的列,就能够实现移除那些不关心的列。

“Price”列会自动计算数据的平均值,可是咱们也能够对该列元素进行计数或求和。要添加这些功能,使用aggfunc和np.sum就很容易实现。

aggfunc能够包含不少函数,下面就让咱们尝试一种方法,即便用numpy中的函数mean和len来进行计数。

若是咱们想经过不一样产品来分析销售状况,那么变量“columns”将容许咱们定义一个或多个列。

列vs.值

我认为pivot_table中一个使人困惑的地方是“columns(列)”和“values(值)”的使用。记住,变量“columns(列)”是可选的,它提供一种额外的方法来分割你所关心的实际值。然而,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。

然而,非数值(NaN)有点使人分心。若是想移除它们,咱们可使用“fill_value”将其设置为0。

其实,我以为添加“Quantity”列将对咱们有所帮助,因此将“Quantity”添加到“values”列表中。

有趣的是,你能够将几个项目设置为索引来得到不一样的可视化表示。下面的代码中,咱们将“Product”从“columns”中移除,并添加到“index”变量中。

对于这个数据集,这种显示方式看起来更有意义。不过,若是我想查看一些总和数据呢?“margins=True”就能够为咱们实现这种功能。

下面,让咱们以更高的管理者角度来分析此渠道。根据咱们前面对category的定义,注意如今“Status”是如何排序的。

一个很方便的特性是,为了对你选择的不一样值执行不一样的函数,你能够向aggfunc传递一个字典。不过,这样作有一个反作用,那就是必须将标签作的更加简洁才行。

此外,你也能够提供一系列的聚合函数,并将它们应用到“values”中的每一个元素上。

也许,同一时间将这些东西全都放在一块儿会有点使人望而生畏,可是一旦你开始处理这些数据,并一步一步地添加新项目,你将可以领略到它是如何工做的。我通常的经验法则是,一旦你使用多个“grouby”,那么你须要评估此时使用透视表是不是一种好的选择。

高级透视表过滤

一旦你生成了须要的数据,那么数据将存在于数据帧中。因此,你可使用自定义的标准数据帧函数来对其进行过滤。

若是你只想查看一个管理者(例如Debra Henley)的数据,能够这样:

咱们能够查看全部的暂停(pending)和成功(won)的交易,代码以下所示:

这是pivot_table中一个很强大的特性,因此一旦你获得了你所须要的pivot_table格式的数据,就不要忘了此时你就拥有了pandas的强大威力。

The full notebook is available if you would like to save it as a reference.

若是你想将其保存下来做为参考,那么这里提供完整的笔记

备忘单

为了试图总结全部这一切,我已经建立了一个备忘单,我但愿它可以帮助你记住如何使用pandas的pivot_table。

相关文章
相关标签/搜索