文章目录

  • 一、 什么是透视表?
  • 二、为什么要使用pivot_table?
  • 三、pivot_table api认识
  • 四、如何使用pivot_table?
    • 4.1 读取数据
    • 4.2 使用index参数
    • 4.3 使用values参数
    • 4.3 使用aggfunc参数
    • 4.3 使用columns参数
  • 五、pivot_table vs. groupby
  • 六、轴转换(透视功能)unstack
  • 七、交叉表crosstab
  • 八、小结

一、 什么是透视表?

透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表(如下图),也体会到它的强大功能,而在pandas中它被称作pivot_table。

二、为什么要使用pivot_table?

  • 灵活性高,可以随意定制你的分析计算要求
  • 脉络清晰易于理解数据
  • 操作性强,报表神器

三、pivot_table api认识

pandas.pivot_table(data, values=None, index=None, columns=None,aggfunc=‘mean’, margins=False)

  • data:[必须]需要操作数据 DataFrame
  • values:要进行计算操作的列名 一个列名或列名组成的列表,不给代表对所有列操作
  • index:[必须]分组后作为行索引的列名 一个列名或列名组成的列表
  • columns:分组后作为行索引的列名 一个列名或列名组成的列表
  • aggfunc:指定对values参数所给的列做什么计算操作,可以是字典(分别为不同的列指定不同的计算操作),默认为mean(计算均值)
  • margins:是否进行行汇总和列汇总

四、如何使用pivot_table?

4.1 读取数据

df = pd.read_csv('data/James_Harden.csv',encoding='utf8')
df.tail()

4.2 使用index参数

每个pivot_table必须拥有一个index,如果想查看哈登对阵每个队伍的得分,首先我们将对手设置为index:

pd.pivot_table(df,index=[u'对手'])


上图红框中的数值分别是[对手=‘76人’]这一组数据中[3分命中率,助攻,命中,得分,投篮命中率,投篮数,篮板]这些数据的平均值.

可以看到,对手成为了第一层索引,还想看看对阵同一对手在不同主客场下的数据,试着将对手胜负主客场都设置为index

pd.pivot_table(df,index=[u'对手',u'主客场'])


试着交换下它们的顺序,数据结果一样,只是索引的顺序发生变化:

pd.pivot_table(df,index=[u'主客场',u'对手'])


通过上面几个操作,我们可以发现:Index就是层次列,要通过透视表获取什么信息就按照相应的顺序设置列,所以在进行pivot之前你也需要足够了解你的数据。

4.3 使用values参数

  • 上面的操作中,我们没有指定需要计算的列,所以默认是对除了"index设定的列"之外的所有列进行计算.
  • Values可以指定需要计算的列

如果我们只需要james harden在主客场和不同胜负情况下的得分、篮板与助攻三项数据:

pd.pivot_table(df,index=[u'主客场',u'胜负'],values=[u'得分',u'助攻',u'篮板'])

4.3 使用aggfunc参数

  • aggfunc参数可以设置我们对数据聚合时进行的函数操作。

  • 当我们未设置aggfunc时,它默认aggfunc='mean’计算均值。

我们还想要获得james harden在主客场和不同胜负情况下的总得分、总篮板、总助攻时:

pd.pivot_table(df,index=[u'主客场',u'胜负'],values=[u'得分',u'助攻',u'篮板'],aggfunc=[np.sum,np.mean])

4.3 使用columns参数

Columns类似Index可以设置列层次字段,它不是一个必要参数,作为一种分割数据的可选方式。

#fill_value填充空值,margins=True进行汇总
pd.pivot_table(df,index=[u'主客场'],columns=[u'对手'],values=[u'得分'],aggfunc=sum,fill_value=0,margins=1)

pd.pivot_table(df,index=[u'对手',u'胜负'],columns=[u'主客场'],values=[u'得分',u'助攻',u'篮板'],aggfunc=np.mean,fill_value=0)

五、pivot_table vs. groupby

你应该理解了pivot_table的用法?是不是在哪见过?

对,Groupby!

  • pivot_table本质就是分组统计
  • pivot_table可以用groupby实现
  • pivot_table的意义在于可以将两个不同的分组维度进行交叉分析
  • pivot_table
#按照"主客场"和"胜负"进行分组后进行交叉透视分析
pd.pivot_table(df,index='主客场',columns='胜负',values='篮板',aggfunc=np.sum,margins=True)

  • groupby
#用groupby实现同样的数据统计
df.groupby(['主客场','胜负'])[['篮板']].sum()

  • 可以看出,相比pivot_table而言,groupby有以下不同:

    • groupby数据没有交叉透视
    • groupby没有汇总统计

六、轴转换(透视功能)unstack

unstack对应的是excel中的透视功能,stack正好相反是逆透视

  • df.unstack(level=-1)

    • level:需要进行逆透视(取消堆叠)的索引级别,默认为-1,即最后一级索引
  • df.stack()
    • 不需要指定参数,功能为逆透视所有列

下面用groupby配合unstack实现pivot_table:

table=df.groupby(['主客场','胜负'])[['篮板']].sum()
table.unstack()

七、交叉表crosstab

crosstab是pivot_table的一种特殊情况

  • crosstab
pd.crosstab(df['主客场'],df['胜负'])

  • pivot_table
pd.pivot_table(df,values='篮板',index='主客场',columns='胜负',aggfunc='count')

八、小结

  • 透视表的作用【知道】

  • pandas.pivot_table(data, values=None, index=None, columns=None,aggfunc=‘mean’, margins=False)

    • values:要计算的字段
    • index:作为行索引的分组字段
    • columns:作为列索引的分组字段
    • aggfunc:要对values做的计算操作函数
  • unstack和stack

    • unstack(level) level:指定要透视的索引级别
    • stack 透视所有列
  • crosstab pivot_table的特殊情况

Pandas中透视表和交叉表相关推荐

  1. 【Python】开启Pandas进阶:图解Pandas透视表、交叉表

    一.图解Pandas透视表.交叉表 终于开始Pandas进阶内容的写作了.相信很多人都应该知道透视表,在Excel会经常去制作它,来实现数据的分组汇总统计.在Pandas中,我们把它称之为pivot_ ...

  2. 第2关:Pandas创建透视表和交叉表

    任务描述 本关任务:使用Pandas加载tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间.每个星期下的小费总和情况. 相关知识 透视表 透视表是各种电子表格程序和其他数据分析软 ...

  3. 【Python】数据分析.pandas.透视表与交叉表

    文章目录 数据分析-pandas.透视表与交叉表 一.透视表 二.交叉表 三.任务实现 数据分析-pandas.透视表与交叉表 一.透视表 数据透视表是数据分析中常见的工具之一,根据一个或多个键值对数 ...

  4. Pandas 统计分析基础 笔记5 _任务4.5 创建透视表与交叉表

    文章目录 pandas__任务4.5 创建透视表与交叉表 4.5 创建透视表与交叉表 代码4-67 使用订单号作为透视表索引制作透视表 代码 4-68 修改聚合函数后的透视表 代码 4-69 使用订单 ...

  5. 【Pandas分组聚合】进阶:透视表、交叉表(pivot_table() 、crosstab())

    Pandas透视表.交叉表 创建DataFrame结构 透视表 pivot_table() 单列聚合 多列聚合 交叉表 crosstab() 计算分组频率 两列分组后求第三列的统计指标 创建DataF ...

  6. 一文让你吃透!图解 pandas 透视表、交叉表!

    一.图解Pandas透视表.交叉表 终于开始Pandas进阶内容的写作了.相信很多人都应该知道透视表,在Excel会经常去制作它,来实现数据的分组汇总统计.在Pandas中,我们把它称之为pivot_ ...

  7. Pandas数据分析15——pandas数据透视表和交叉表

    参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对数据框也可以像excel一样进行数据透视表整合之类的操作.主要是针对分类数据进行操作,还可以计算数值型 ...

  8. Python数据分析 | (31) 透视表和交叉表

    目录 1. 透视表 2. 交叉表:crosstab 3. 总结 1. 透视表 透视表(pivot table)是各种电子表格程序和其他数据分析软件中一种常见的 数据汇总工具.它根据一个或多个键对数据进 ...

  9. 4.5 创建透视表与交叉表

    4.5 创建透视表与交叉表 4.5.1利用pivot_table函数可以实现透视表 pivot_table函数的常用参数及其说明 4.5.2 使用crosstab函数创建交叉表 crosstab函数的 ...

  10. python做数据透视表_Python--数据透视表和交叉表、数据读取

    数据 透视表 and 交叉表 先看数据是什么样的 ... #date dati = ['2019-11-01','2019-11-02','2019-11-03']*3rng=pd.to_dateti ...

最新文章

  1. mongodb 入门
  2. js通过正则表达式解析xml 获取指定的内容
  3. java去重复的集合_如何去除Java中List集合中的重复数据
  4. linux sftp没有读写权限,sftp服务器上的Linux权限问题
  5. 拼接字符串时去掉最后一个多余逗号
  6. 梯度下降法及其Python实现
  7. android自动启动某个程序,android – 如何以编程方式在xiaomi中启用应用程序的自动启动...
  8. java中content啥意思_JSTL标签中的body-content标签体内容输出格式的介绍
  9. 易飞扬宣布完成100G CWDM4PSM4光模块量产线建设
  10. [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
  11. 奥维地图导入西安坐标_奥维地图导入坐标样式 奥维地图批量导入经纬度坐标...
  12. [开发笔记]-多线程
  13. java 拉勾网,拉钩网java笔试题分享
  14. 字符串统计(2017)
  15. MyDockFinder(mydock myfinder合二为一版)
  16. E3来了,今年有哪些令人期待的游戏新作?
  17. 鸟哥私房菜 第十五章、时间服务器: NTP 服务器
  18. JUnit测试提示 java.lang.Exception: No public static parameters method on class
  19. hdu.6441 Find Integer
  20. FFmpeg提取视频中的音频

热门文章

  1. 微信小程序订阅信息之Java实现详解
  2. Linux 启动项管理
  3. 提交代码遇到 Everything up-to-date 或 提交代码遇到 On branch master Your branch and ‘origin/master‘ have diverg
  4. 学校的友宝自动售货机出故障 不知什么系统呵
  5. C语言结构体字节对齐规则
  6. 定积分的基本性质6 积分第一中值定理
  7. APICloud和海马玩模拟器结合调试手机页面
  8. TinyXML2使用教程
  9. DevExpress的XtraReport控件相关功能介绍
  10. are exo exo是什么歌 we_We Are One EXO!