首页 编程教程正文

Pandas透视表(pivot_table)详解

piaodoo 编程教程 2020-02-02 11:57:29 987 0 python教程

这篇文章主要介绍了Pandas透视表(pivot_table)详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

介绍

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

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

作为一个额外的福利,我创建了一个总结pivot_table的简单备忘单。你可以在本文的最后找到它,我希望它能够对你有所帮助。如果它帮到了你,请告诉我。

数据

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

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

典型的问题包括:

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

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

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

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

Read in the data

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

如果你想跟随我继续下去,那么可以下载这个Excel文件。

import pandas as pd

import numpy as np

版本提醒

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

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

df = pd.read_excel("../in/sales-funnel.xlsx")

df.head()

嗨学网 

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

其实,并不严格要求这样做,但这样做能够在分析数据的整个过程中,帮助我们保持所想要的顺序。

df["Status"] = df["Status"].astype("category")

df["Status"].cat.set_categories(["won","pending","presented","declined"],inplace=True)

处理数据

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

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

pd.pivot_table(df,index=["Name"])

嗨学网

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

pd.pivot_table(df,index=["Name","Rep","Manager"])

嗨学网

这样很有趣但并不是特别有用。我们可能想做的是通过将“Manager”和“Rep”设置为索引来查看结果。要实现它其实很简单,只需要改变索引就可以。

pd.pivot_table(df,index=["Manager","Rep"])

嗨学网

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

为此,“Account”和“Quantity”列对于我们来说并没什么用。所以,通过利用“values”域显式地定义我们关心的列,就可以实现移除那些不关心的列。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"])

嗨学网

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

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=np.sum)

嗨学网

aggfunc可以包含很多函数,下面就让我们尝试一种方法,即使用numpy中的函数mean和len来进行计数。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],aggfunc=[np.mean,len])

嗨学网

如果我们想通过不同产品来分析销售情况,那么变量“columns”将允许我们定义一个或多个列。

列vs.值

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

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],

        columns=["Product"],aggfunc=[np.sum])

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

pd.pivot_table(df,index=["Manager","Rep"],values=["Price"],

        columns=["Product"],aggfunc=[np.sum],fill_value=0)

嗨学网

其实,我觉得添加“Quantity”列将对我们有所帮助,所以将“Quantity”添加到“values”列表中。

pd.pivot_table(df,index=["Manager","Rep"],values=["Price","Quantity"],

        columns=["Product"],aggfunc=[np.sum],fill_value=0)

嗨学网

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

pd.pivot_table(df,index=["Manager","Rep","Product"],

        values=["Price","Quantity"],aggfunc=[np.sum],fill_value=0)

嗨学网

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

pd.pivot_table(df,index=["Manager","Rep","Product"],

        values=["Price","Quantity"],

        aggfunc=[np.sum,np.mean],fill_value=0,margins=True)

 嗨学网

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

pd.pivot_table(df,index=["Manager","Status"],values=["Price"],

        aggfunc=[np.sum],fill_value=0,margins=True)

嗨学网

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

pd.pivot_table(df,index=["Manager","Status"],columns=["Product"],values=["Quantity","Price"],

        aggfunc={"Quantity":len,"Price":np.sum},fill_value=0)

嗨学网

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

table = pd.pivot_table(df,index=["Manager","Status"],columns=["Product"],values=["Quantity","Price"],

        aggfunc={"Quantity":len,"Price":[np.sum,np.mean]},fill_value=0)

table

 嗨学网

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

高级透视表过滤

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

如果你只想查看一个管理者(例如Debra Henley)的数据,可以这样:

table.query('Manager == ["Debra Henley"]')

嗨学网

我们可以查看所有的暂停(pending)和成功(won)的交易,代码如下所示:

table.query('Status == ["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。

嗨学网

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:http://www.piaodoo.com/558.html

评论

搜索

游戏网站源码,织梦网站源码,wordpress,wordpress主题,wordpress下载,wordpress插件,wordpress.com,wordpress模板,wordpress教程,wordpress 主题,wordpress安装,wordpress 模板,wordpress 插件,wordpress主题下载,wordpress企业主题,wordpress seo,wordpress主题开发,wordpress theme,wordpress论坛,wordpress 企业主题,wordpress主机,wordpress中文主题,wordpress cms主题,wordpress plugin,wordpress 主题下载,wordpress 主机,wordpress空间,wordpress mu,wordpress 模版,wordpress汉化主题,wordpress淘宝客主题,wordpress 空间,wordpress代码,WORDPRESS HOSTING,wordpress优点,wordpress安卓客户端,wordpress技巧,wordpress换空间,wordpress themes,网站模板,ppt模板网站,模板网站,企业网站模板,网站设计模板,免费网站模板,个人网站模板,ppt模板下载网站,网站模板下载,公司网站模板,门户网站模板,学校网站模板,网站首页模板,网站模板免费下载,旅游网站模板,网站后台模板,免费网站模板下载,传奇网站模板,网站建设模板,外贸网站模板,网站 模板,个人主页网站模板,个人网站模板下载,政府网站模板,音乐网站模板,导航网站模板,免费企业网站模板,企业网站模板下载,手表网站模板,韩国网站模板,汽车网站模板,教育网站模板,网站后台管理模板,班级网站模板,新闻网站模板,房产中介网站模板,旅游网站模板下载,工艺品网站模板,电子商务网站模板,旅游网站设计模板,团购网站模板,flash网站模板,个人网站设计模板,婚庆网站模板,广告公司网站模板,商业网站模板,手机网站模板,免费模板网站推荐,ppt免费模板网站推荐,织梦网站模板,html网站模板建站,网站html模板,免费个人网站模板,公司网站源码,sns源码,彩票网站源码,周易网站源码,源码基地,交友源码,学校网站源码,asp.net 源码,源码天下,jsp网站源码,论坛源码下载,广告联盟源码,建站源码,delphi源码,源码爱好者,酷源码,net源码,源码超市,医疗网站源码,flash源码,搜源码,源码程序,dede源码,新闻网站源码,易语言源码大全,旅游网站源码下载,flash 源码,免费源码论坛,android游戏源码,电脑维修网站源码,30源码网,股票软件源码,卖源码,源码教程,安居客 源码,vip源码,家教源码,.net源码下载,Web源码,网络公司源码,佛教网站源码,android源码学习,房产源码,钓鱼网站源码,775源码屋,web游戏源码,成品网站 源码78w78不用下载,h5游戏网站源码,asp网站源码下载,webgame源码,电子商务网站源码,vb.net源码,乐嘿源码,8a商业源码论坛,fbreader源码,在线客服系统 源码,google源码,.net网站源码,快递查询源码,源码搜藏网,dede整站源码,周易 源码,52源码论坛,财经网站源码,织梦下载站源码,qq钓鱼网站源码,flash游戏源码,房产网源码,源码搜搜,电子商务源码,团购网站源码,团购网源码,jsp源码下载,jsp源码,h站源码,8a源码,婚纱摄影网站源码,易语言盗号源码,x站源码,qq空间psd源码,免费商业源码,笑话网站源码,源码集合,源码家园,啊哦源码,星期六源码,源码熊,阿奇源码,百分百源码网,一手日源码资源,旅行网站源码,b站工程源码泄露,新站长源码,8a商业源码,asp论坛源码,flash源码下载,404源码社区,创业网站源码,php网页源码,易支付源码,成品网站w灬源码,免费CMS成品网站源码,成品网站W灬源码1688仙踪林,成品APP短视频源码下载网站,成品网站源码1688可靠吗,免费B2B网站源码,成品APP直播源码下载,国外儿童网站源码在线,成品网站W灬源码1688,源码,成品网站w灬 源码1688,免费源码网站都有哪些,成品网站源码78W78隐藏通道1,网站源码,源码网,源码网站,源码时代,源码之家,源码下载,php源码,易语言源码,源码论坛,源码是什么,商城源码,论坛源码,源码交易,源码站,源码库,免费源码,免费网站ja**源码大全,ja**源码,成品网站w灬源码1377,a5源码,站长源码,成品网站源码78W78隐藏通道1APP,源码分享,网站源码下载,源码中国,asp源码,源码社区,企业网站源码,php源码下载,成品app直播源码搭建,在线观看视频网站源码2021,旅游网站源码,安卓源码,通达信选股公式源码,神马影院php源码,c#源码,成品网站w灬源码1688网页,php 源码,网页游戏源码,android源码下载,源码吧,视频源码大全,成品短视频APP源码搭建,asp源码下载,私服源码,电脑维修源码,个人主页源码,源码出售,php网站源码,刀客源码,网址导航源码,导航网站源码,源码天空,asp 源码,软件源码,精品源码,成品网站源码1688自动跳转,个人网站源码,源码哥,在线考试系统源码,cms源码,c# 源码,商业源码,vb源码,门户网站源码,音乐网站源码,中国源码,安卓源码下载,asp网站源码,在线客服源码,电影网站源码,免费源码下载,整站源码,源码交易网,易语言源码网,.net源码,在线客服系统源码,淘客源码,卡盟源码,网站源码出售,vb源码下载,莎莎源码,熊猫烧香源码,asp.net源码,商业源码网,外贸网站源码,61源码网,zblog模板,zblog企业模板,帝国cms模板,帝国cms插件,discuz模板