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

 

posted @ 2020-08-22 12:27  大脸猫12581  阅读(289)  评论(0编辑  收藏  举报