透视出来的数据如何按需求筛选呢?
别急,上一篇文章讲了pandas 里面的透视表制作,就像Excel一样,透视表可以筛选,可以提取,别急,pivot_table也可以,让我慢慢道来。
一. 筛选提取实例
透视一层的数据就没的必要筛选,所以这里的筛选指的都是2层透视以上的。
首先看一个透视表
aa=pd.pivot_table(data1,values=['消费','展现量'],index=['业态','城市'],aggfunc={ '消费':'sum','展现量':'count'})
aa.head(20)
展现量 消费
业态 城市
融资 上海 677 1.165594e+06
北京 539 9.218017e+05
成都 566 1.285583e+06
杭州 376 3.617674e+05
武汉 395 4.748063e+05
重庆 524 8.546292e+05
认证 成都 27 3.448020e+03
资质 上海 858 5.413939e+04
东莞 221 1.079273e+04
企业服务研究院 76 4.427083e+04
北京 1200 1.651653e+05
宜昌 280 8.869690e+03
广州 871 9.633184e+04
成都 833 1.249824e+05
杭州 715 6.051889e+04
武汉 861 7.227470e+04
深圳 666 6.583873e+04
郑州 377 3.735482e+04
重庆 859 9.472752e+04
长沙 775 4.942042e+04
- 需求:只看资质业态的数据
aa.loc[pd.IndexSlice['资质']]
展现量 消费
城市
上海 858 54139.388288
东莞 221 10792.732777
企业服务研究院 76 44270.830000
北京 1200 165165.305125
宜昌 280 8869.689556
广州 871 96331.844330
成都 833 124982.446914
杭州 715 60518.890780
武汉 861 72274.697308
深圳 666 65838.728904
郑州 377 37354.815461
重庆 859 94727.515453
长沙 775 49420.415103
- 需求:只看杭州地区的数据
aa.loc[pd.IndexSlice[:,"杭州"],]
展现量 消费
业态 城市
互联网 杭州 807 84936.879896
工商 杭州 447 39121.500000
法律 杭州 275 217838.180000
综合 杭州 362 76875.420000
融资 杭州 376 361767.429167
资质 杭州 715 60518.890780
- 需求:只看消费数据
aa.loc[pd.IndexSlice[:,:],'消费'].head()
业态 城市
互联网 上海 88684.016736
上海平台 116.420000
广州 107888.500000
广州平台 85.190000
成都 104646.559016
Name: 消费, dtype: float64
二. 总结
筛选提取方法好几种,但是我平时用的多的就是这一种:
loc+pd.IndexSlice
loc[row,column]:
row代表行数,这里用索引的层级代替
columns代表列名,多个也是[]括起来
pd.IndexSlice[levels]:层级,就是透视的层级,全选用‘:’代替,每一层级间用‘,’分开,顺序不那个乱了
例如:
aa.loc[pd.IndexSlice['融资',:],['消费','展现量']].head()
消费 展现量
业态 城市
融资 上海 1.165594e+06 677
北京 9.218017e+05 539
成都 1.285583e+06 566
杭州 3.617674e+05 376
武汉 4.748063e+05 395