一.写在前面
1. 什么是透视表
透视表是一种可以对数据动态排布并且分类汇总的表格格式。大多数人对数据透视表的理解停留在Excel中,它的功能强大,使用方便,pandas作为数据处理的‘专用库’,肯定也得有哈,pandas中它叫pivot_table。
2.为啥要用透视表
至于透视表的优势我就不多扯了,相信很多人在Excel里用的很多,废话不多说,直接进入主题
二.pandas 里面的透视表的使用
上面也提到了,pandas中的透视表构建是用的pivot_table
1.pivot_table参数详解
官方介绍
虽然有它有好多个参数,但是常用的也就是下面几个:
data:要透视的数据(必须)
values:默认是None,当不给值时,是对你数据的所有列进行透视聚合,给值时,就是透视你指定的列进行透视聚合
index:就是透视的行,相当于Excel透视的行
columns:就是透视的列,相当于Excel透视的列
aggfunc:默认为mean.这个就是聚合的方式(求和,计数还是平均),相当于Excel 透视的值汇总方式
2.使用实例
我这边的数据是一个消费数据
- 数据读取
import pandas as pd
data=pd.read_excel('时间序列.xlsx')
data.head()
日期 业态 产品 推广平台 城市 展现量 点击量 消费 返点 推广方式
0 2020-04-25 互联网 网站建设 神马搜索 杭州 10.0 1.0 9.45 0.35 网运
1 2020-04-25 互联网 网站建设 神马搜索 长沙 7.0 0.0 0.00 0.35 网运
2 2020-04-25 互联网 微信业务 搜狗搜索 杭州 6.0 1.0 1.26 0.35 网运
3 2020-04-25 互联网 微信业务 神马搜索 杭州 15.0 1.0 7.27 0.35 网运
4 2020-04-25 互联网 微信业务 神马搜索 长沙 5.0 1.0 14.94 0.35 网运
- index 的应用:index可以是一个,也可以是多个,当多个时,要用[]括起来,效果也是多层透视
pd.pivot_table(data1,index='日期').head()
展现量 消费 点击量
日期
2020-04-25 2063.160891 137.259975 21.960396
2020-04-26 5129.385057 313.607701 57.025862
2020-04-27 6300.511379 358.919839 66.480589
2020-04-28 6426.259060 381.800819 67.021477
2020-04-29 5819.669850 361.830450 65.650750
pd.pivot_table(data1,index=['日期','业态']).head(10)
展现量 消费 点击量
日期 业态
2020-04-25 互联网 8.600000 6.584000 0.800000
交易 6695.666667 236.155000 72.500000
工商 1141.810811 63.209297 12.491892
法律 1379.153846 208.209231 32.123077
综合 583.441176 74.140294 9.411765
融资 11446.435897 622.981282 79.051282
资质 373.885714 27.983143 9.014286
2020-04-26 互联网 2902.631579 115.244737 22.578947
交易 7598.500000 417.613333 93.000000
工商 1809.387833 115.192167 22.288973
- columns 的应用h和index的用法完全一致,只是展现效果一个是纵向一个是横向,就不多赘述,两个也可以一起使用(必须说明的是:index和columns必须要有一个)
pd.pivot_table(data1,columns='推广方式',index='业态')
展现量 消费 点击量
推广方式 新媒体 网运 新媒体 网运 新媒体 网运
业态
互联网 6964.267984 424.108585 289.864177 60.885087 86.132007 5.374164
交易 43660.975460 1049.840557 820.769571 185.923576 322.552147 26.693498
人事外包 NaN 1617.602679 NaN 57.810804 NaN 16.750000
工商 11383.746653 1225.896981 339.383007 125.524507 100.725026 17.517441
法律 12231.040781 3723.593575 445.847948 668.575700 120.526247 89.609638
知产 3489.333333 3025.273333 351.921250 700.907867 81.291667 86.780000
综合 8576.085106 1262.490385 357.419858 196.109659 84.312057 20.726683
融资 43171.685162 11626.503734 1401.777318 1911.561650 277.004364 153.552614
认证 NaN 2726.444444 NaN 127.704444 NaN 27.666667
资质 9013.466867 1029.108488 168.616424 78.625196 73.635542 24.663848
- values 的使用:它是指定对那一列或者那几列进行聚合
pd.pivot_table(data1,values='消费',index='业态')
消费
业态
互联网 113.155649
交易 313.834450
人事外包 57.810804
工商 149.560227
法律 601.545087
知产 652.771782
pd.pivot_table(data1,values=['消费','展现量'],index='业态')
展现量 消费
业态
互联网 1917.073765 113.155649
交易 9635.273177 313.834450
人事外包 1617.602679 57.810804
工商 2367.545460 149.560227
法律 6283.936415 601.545087
- aggfunc 的使用:用于指定聚合方式,默认是求平均,当然你可以求多个不同的
pd.pivot_table(data1,values=['消费','展现量'],index='业态',aggfunc='sum').head()
展现量 消费
业态
互联网 9288222.39 548239.12
交易 7794936.00 253892.07
人事外包 362343.00 12949.62
工商 40908818.00 2584251.16
法律 48128669.00 4607233.82
pd.pivot_table(data1,values=['消费','展现量'],index='业态',aggfunc=['sum','count','mean']).head()
sum count mean
展现量 消费 展现量 消费 展现量 消费
业态
互联网 9288222.39 548239.12 4845 4845 1917.073765 113.155649
交易 7794936.00 253892.07 809 809 9635.273177 313.834450
人事外包 362343.00 12949.62 224 224 1617.602679 57.810804
工商 40908818.00 2584251.16 17279 17279 2367.545460 149.560227
法律 48128669.00 4607233.82 7659 7659 6283.936415 601.545087
你甚至可以指定不同列按不同的聚合方式聚合:只要需要在aggfunc函数后面用字典参数
pd.pivot_table(data1,values=['消费','展现量'],index='业态',aggfunc={ '消费':'sum','展现量':'count'}).head()
展现量 消费
业态
互联网 4845 548239.12
交易 809 253892.07
人事外包 224 12949.62
工商 17279 2584251.16
法律 7659 4607233.82
是不是很简单呢!多练练,很快掌握