一文看懂透视表pivot_table

作者: 叫我老村长 | 来源:发表于2020-01-23 14:22 被阅读0次
    Pandas | 一文看懂透视表pivot_table

    什么是透视表?

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

    image

    Excel中的数据透视表</figcaption>

    为什么要使用pivot_table?

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

    如何使用pivot_table?

    首先读取数据,作为一个老火密,本文将火箭队当家吉祥物James_Harden本赛季比赛数据作为数据集进行讲解,就是下面这个大胡子。

    image
    import pandas as pd
    import numpy as np
    df = pd.read_csv('h:/James_Harden.csv',encoding='utf8')
    df.tail()
    
    image

    最后5场比赛数据

    pivot_table有四个最重要的参数index、values、columns、aggfunc,本文以这四个参数为中心讲解pivot操作是如何进行。

    Index

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

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

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

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

    试着交换下它们的顺序,数据结果一样:

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

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

    Values

    通过上面的操作,我们获取了james harden在对阵对手时的所有数据,而Values可以对需要的计算数据进行筛选,如果我们只需要james harden在主客场和不同胜负情况下的得分、篮板与助攻三项数据:

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

    Aggfunc

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

    当我们未设置aggfunc时,它默认aggfunc='mean'计算均值。我们还想要获得james harden在主客场和不同胜负情况下的得分、篮板、助攻时:

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

    Columns

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

    #fill_value填充空值,margins=True进行汇总
    pd.pivot_table(df,index=[u'主客场'],columns=[u'对手'],values=[u'得分'],aggfunc=[np.sum],fill_value=0,margins=1)
    
    image
    table=pd.pivot_table(df,index=[u'对手',u'胜负'],columns=[u'主客场'],values=[u'得分',u'助攻',u'篮板'],aggfunc=[np.mean],fill_value=0)
    
    image

    我是上表

    pivot_table vs. groupby

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

    对,Groupby!

    pd.pivot_table(df,index=[字段1],values=[字段2],aggfunc=[函数],fill_value=0)
    df.groupby([字段1])[字段2].agg(函数).fillna(0)
    

    上面两个函数完全等价,pivot_table仿佛是加入了columns与margin功能的groupby函数,比groupby更加灵活。

    query

    当表格生成后如何查询某一项数据呢?

    ex.根据上表查询哈登对阵灰熊时的数据

    table.query('对手 == ["灰熊"]')
    
    image

    Cheat Sheet

    image

    Practice

    统计哈登不同主客场与胜负下的场数以及投篮命中率(哈登在主场且胜利的场数以及在这种情况下的投篮命中率)

    相关文章

      网友评论

        本文标题:一文看懂透视表pivot_table

        本文链接:https://www.haomeiwen.com/subject/zbktactx.html