Pandas 透视表功能及透视数据筛选提取(透视)

一.写在前面

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.使用实例

我这边的数据是一个消费数据

  1. 数据读取
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	网运
  1. 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
  1. 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
  1. 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
  1. 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

是不是很简单呢!多练练,很快掌握

你可能感兴趣的:(python)