zoukankan      html  css  js  c++  java
  • 8-Pandas扩展之数据透视表

    一、什么是数据透视表?

      数据透视表(pivot table)是一种在电子表格程序和其他数据分析软件中常用的数据汇总工具

      数据透视表是一种交互式的表,可进行如求和与计算等操作。可以动态的改变版面布置,会立即按照新的布置重新计算数据。

      在数据与探索和数据整理时比较常用。

    二、数据透视表的创建

      方法一:pd.pivot_table(data,)  

      方法二:data.pivot_table()

    pivot_table常用参数
    参数 说明
    index 指定索引,在数据透视表中按行分组
    values 选择显示的或需要进行聚合运算的列
    columns 将values按所选列进行分组
     aggfunc  聚合运算的方法
     fill_value 将缺失值替换成指定值 
     dropna 默认为True,不包含全部为缺失值的列 
     margins 添加行/列的总计数据,默认是False
     margins_name 命名添加的行/列总计数据 

    (1)index

      以class.xlsx为例,将index设为sex,表中根据sex一列进行分组聚合,默认计算数值型数据的平均值

    >>> df = pd.read_excel('C:/Users/xhl/Desktop/input/class.xlsx')
    >>> df
      class     sex  score_math  score_music
    0     A    male          95           79
    1     A  female          96           90
    2     B  female          85           85
    3     C    male          93           92
    4     B  female          84           90
    5     B    male          88           70
    6     C    male          59           89
    7     A    male          88           86
    8     B    male          89           74
    
    #默认求均值
    >>> df.pivot_table(index='sex')
            score_math  score_music
    sex
    female   88.333333    88.333333
    male     85.333333    81.666667
    
    >>> df.pivot_table(index='sex',aggfunc = np.max)
           class  score_math  score_music
    sex
    female     B          96           90
    male       C          95           92
    

       使用index设置层次化索引

    >>> df.pivot_table(index=['sex','class'])
                  score_math  score_music
    sex    class
    female A            96.0         90.0
           B            84.5         87.5
    male   A            91.5         82.5
           B            88.5         72.0
           C            76.0         90.5
    

    (2)values---显示需要进行聚合运算的类

    >>> df.pivot_table(index='sex',values='score_math')
            score_math
    sex
    female   88.333333
    male     85.333333

    (3)columns---设置分组方式

    #columns表示根据class将数学分数进行纵向分组
    >>> df.pivot_table(index='sex',values='score_math',columns='class')
    class      A     B     C
    sex
    female  96.0  84.5   NaN
    male    91.5  88.5  76.0
    

      index与columns的列进行互换,将该卞数据透视表的结构

    >>> df.pivot_table(index='class',columns='sex')
          score_math       score_music
    sex       female  male      female  male
    class
    A           96.0  91.5        90.0  82.5
    B           84.5  88.5        87.5  72.0
    C            NaN  76.0         NaN  90.5
    
    >>> df.pivot_table(index='sex',columns='class')
           score_math             score_music
    class           A     B     C           A     B     C
    sex
    female       96.0  84.5   NaN        90.0  87.5   NaN
    male         91.5  88.5  76.0        82.5  72.0  90.5
    

    (4)values和columns的区别

    • values选择的列是希望在表中展示的数值,聚合函数aggfunc最终将应用到该值之上
    • columns选择的列是在提供一个将values的值进行纵向分组的方式

    (5)aggfunc传入Numpy函数

      传入一个一个函数就进行一次计算,传入多个函数就进行多次计算,不再赘述;

    >>>aggfunc=np.sum
    >>>aggfunc=[np.sum,np.max]
    >>>{'score_math':[np.sum,np.max],'score_music':np.sum}

    (6)margins添加行/列总计

    >>> df.pivot_table(index='sex',values='score_math',columns='class',margins = True)
    class      A     B     C        All
    sex
    female  96.0  84.5   NaN  88.333333
    male    91.5  88.5  76.0  85.333333
    All     93.0  86.5  76.0  86.333333
    

    (7)margins_name:对 margins进行命名

    >>> df.pivot_table(index='sex',values='score_math',columns='class',margins = True,margins_name = 'all_mean')
    class        A     B     C   all_mean
    sex
    female    96.0  84.5   NaN  88.333333
    male      91.5  88.5  76.0  85.333333
    all_mean  93.0  86.5  76.0  86.333333
    

     

  • 相关阅读:
    模式识别之svm()---支持向量机svm 简介1995
    机器视觉之相关资源--- 计算机视觉相关的部分测试数据集和源码站点
    包的引入,不要引入自己目录下的。
    内省对象 用的少,被BeanUtils代替
    使用增强for循环遍历集合的时候操作集合的问题?
    Integer 内部实现
    eclipse常用快捷键
    java 运行时环境和编译器环境
    js 随机变换图片
    js 事件点击 显示 隐藏
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13545079.html
Copyright © 2011-2022 走看看