pandas pivot_table 活学活用实例教程 Posted 2020-12-31 onemorepoint
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas pivot_table 活学活用实例教程相关的知识,希望对你有一定的参考价值。
pandas pivot_table 活学活用实例教程
导入相关数据分析的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
df=pd.read_excel("all_data_meituan.xlsx")
df=df[[‘commentTime‘,‘menu‘,‘readCnt‘,‘star‘,‘userId‘,‘userLevel‘,‘zanCnt‘]].dropna()
# 这里去掉缺失值,因为后面的透视表中的处理都是直接去除缺失值(dropna=True),这边我们先处理掉,以免与后面的结果发生了矛盾,还要分析问题在哪里。
df.head() # 看出前5行
commentTime
menu
readCnt
star
userId
userLevel
zanCnt
0
1525875708515
单人午晚餐
25434
40
291754497
1
2
1
1527853291658
2人午晚餐
7293
40
829297130
2
0
2
1522813943711
2人午晚餐
31787
50
38217090
4
2
3
1525165942926
单人午晚餐
10334
20
67726205
5
1
4
1526546884897
单人午晚餐
5658
30
93974894
3
0
def convertTime(x):
y=time.localtime(x/1000)
z=time.strftime("%Y-%m-%d %H:%M:%S",y)
return z
df["commentTime"]=df["commentTime"].apply(convertTime)
df.head()
commentTime
menu
readCnt
star
userId
userLevel
zanCnt
0
2018-05-09 22:21:48
单人午晚餐
25434
40
291754497
1
2
1
2018-06-01 19:41:31
2人午晚餐
7293
40
829297130
2
0
2
2018-04-04 11:52:23
2人午晚餐
31787
50
38217090
4
2
3
2018-05-01 17:12:22
单人午晚餐
10334
20
67726205
5
1
4
2018-05-17 16:48:04
单人午晚餐
5658
30
93974894
3
0
查看数据类型信息
df.info()
<class ‘pandas.core.frame.DataFrame‘>
Int64Index: 17223 entries, 0 to 199
Data columns (total 7 columns):
commentTime 17223 non-null object
menu 17223 non-null object
readCnt 17223 non-null int64
star 17223 non-null int64
userId 17223 non-null int64
userLevel 17223 non-null int64
zanCnt 17223 non-null int64
dtypes: int64(5), object(2)
memory usage: 1.1+ MB
最简单的透视表
# 下面使用pandas中我们在前面的数据分析中未使用到的一个大的模块,透视表pivot_table
pd.pivot_table(df,index=[‘menu‘])
readCnt
star
userId
userLevel
zanCnt
menu
2人午晚餐
1592.576047
37.404450
3.195518e+08
2.269764
0.073691
4人午/晚自助
1378.817837
37.311828
2.507373e+08
2.565465
0.041746
6人午/晚自助
999.232742
42.149901
3.469539e+08
3.130178
0.047337
单人下午自助烤肉
3722.082942
34.162754
3.821938e+08
1.654147
0.574335
单人午/晚自助
1618.223881
42.985075
2.580148e+08
2.597015
0.000000
单人午晚餐
1733.297959
37.357143
3.197547e+08
2.393367
0.105867
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
137.885167
41.004785
2.346154e+08
2.473684
0.000000
周一至周五自助烤肉,免费WiFi
74.181818
50.000000
3.153784e+08
0.545455
0.000000
学生专享午晚自助
1501.586050
38.669447
3.725546e+08
2.309704
0.090599
直接敲击该函数,在notebook中可以查看该函数的参数
# 查看函数的参数以及默认参数,其中aggfunc意思是透视表使用的聚类分析方法,这种简单的透视表我们可以通过groupby实现,df.groupby(‘menu‘).mean()
# 这里针对的数值型字段,比如我们在预处理中的评论时间字段并没有出现求平均的结果
pd.pivot_table
<function pandas.core.reshape.pivot.pivot_table(data, values=None, index=None, columns=None, aggfunc=‘mean‘, fill_value=None, margins=False, dropna=True, margins_name=‘All‘)>
多个索引列
# 实际上单个索引的pivot_table 与groupby得到的结果一样,可以这样说,pivot_table是高级版本的groupby,提供了很多groupby不能实现的功能
# 多索引,通过列表传入
pd.pivot_table(df,index=[‘menu‘,‘star‘])
# 发现一个问题,star索引列中的数据显示不全,有的menu评分不全,不过这并不影响我们进行分析
# 加入star列类型是int类型的话,会有显示不全的信息,但是将star列转化为category类之后,数据显示完整,后文有示例
# 发现每个menu重的点赞的平均数在评分位10分的最高,也就是浏览评论数据的人中给10分的评价点赞数最多,很可能是因为一针见血的指出了该品类的真相。。
readCnt
userId
userLevel
zanCnt
menu
star
2人午晚餐
10
3209.762918
2.658655e+08
2.306991
0.486322
20
1332.634146
3.405706e+08
2.084428
0.026266
30
453.680819
3.168836e+08
2.031968
0.011489
40
1387.565459
3.124086e+08
2.258136
0.059172
50
2770.622104
3.345696e+08
2.556467
0.099421
4人午/晚自助
10
2894.969466
1.837606e+08
1.190840
0.305344
20
989.529412
7.500110e+07
2.058824
0.000000
30
608.138889
2.855711e+08
2.469907
0.000000
40
1413.608696
2.492934e+08
2.833333
0.014493
50
1651.925373
2.624418e+08
2.835821
0.037313
6人午/晚自助
10
2880.000000
1.417346e+08
3.000000
1.000000
30
1382.437500
3.574079e+08
2.321429
0.133929
40
475.014085
3.931602e+08
3.619718
0.000000
50
1066.473469
3.220952e+08
3.220408
0.004082
单人下午自助烤肉
10
3316.081633
8.303536e+08
1.408163
2.244898
20
1674.000000
0.000000e+00
0.000000
0.000000
30
3483.173077
3.891840e+08
1.423077
0.682692
40
4040.034722
1.299745e+08
1.833333
0.034722
50
4223.017751
3.738496e+08
2.124260
0.000000
单人午/晚自助
30
2424.000000
0.000000e+00
0.000000
0.000000
40
1600.037037
2.413956e+08
2.370370
0.000000
50
1366.000000
3.589771e+08
3.666667
0.000000
单人午晚餐
10
2107.811321
1.450798e+08
2.245283
0.754717
20
2236.238255
3.244870e+08
2.526846
0.473154
30
566.427984
2.748531e+08
2.153909
0.011523
40
2247.692881
3.391905e+08
2.437914
0.084437
50
2288.451967
3.638373e+08
2.588289
0.071363
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
1313.000000
5.211120e+08
2.000000
0.000000
30
71.260870
2.453638e+08
2.195652
0.000000
40
83.060606
1.129387e+08
2.484848
0.000000
50
79.632184
2.883081e+08
2.666667
0.000000
周一至周五自助烤肉,免费WiFi
50
74.181818
3.153784e+08
0.545455
0.000000
学生专享午晚自助
10
1331.108911
5.364212e+08
1.000000
0.207921
20
1602.905759
3.906107e+08
2.371728
0.104712
30
731.221172
3.847745e+08
1.809074
0.102079
40
1091.994759
2.895067e+08
2.679245
0.046122
50
2424.111240
4.336949e+08
2.347625
0.115875
特定列的统计
# 上面的分析中包含了多列的平均值,假如我们只想看其中的readCnt 列,可以传入values参数
pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘)
readCnt
menu
star
2人午晚餐
10
3209.762918
20
1332.634146
30
453.680819
40
1387.565459
50
2770.622104
4人午/晚自助
10
2894.969466
20
989.529412
30
608.138889
40
1413.608696
50
1651.925373
6人午/晚自助
10
2880.000000
30
1382.437500
40
475.014085
50
1066.473469
单人下午自助烤肉
10
3316.081633
20
1674.000000
30
3483.173077
40
4040.034722
50
4223.017751
单人午/晚自助
30
2424.000000
40
1600.037037
50
1366.000000
单人午晚餐
10
2107.811321
20
2236.238255
30
566.427984
40
2247.692881
50
2288.451967
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
1313.000000
30
71.260870
40
83.060606
50
79.632184
周一至周五自助烤肉,免费WiFi
50
74.181818
学生专享午晚自助
10
1331.108911
20
1602.905759
30
731.221172
40
1091.994759
50
2424.111240
规定特定的聚合函数
# 此时,我们也会考虑,这个地方是不是只能是平均值,回答当然是no,还可以通过aggfunc传入其他的参数,以获得不同的结果,例如
# 我们可以通过传入np.sum,函数,求总和
pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘,aggfunc=np.sum)
readCnt
menu
star
2人午晚餐
10
1056012
20
710294
30
908269
40
3751977
50
5740729
4人午/晚自助
10
379241
20
67288
30
262716
40
585234
50
885432
6人午/晚自助
10
23040
30
154833
40
67452
50
261286
单人下午自助烤肉
10
324976
20
33480
30
724500
40
581765
50
713690
单人午/晚自助
30
24240
40
43201
50
40980
单人午晚餐
10
223428
20
666399
30
688210
40
2715213
50
2501278
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
13130
30
3278
40
5482
50
6928
周一至周五自助烤肉,免费WiFi
50
1632
学生专享午晚自助
10
134442
20
306155
30
386816
40
1041763
50
2092008
传入多个聚合函数
# aggfunc 可以传入多个参数
pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘,aggfunc=[np.sum,len])
sum
len
readCnt
readCnt
menu
star
2人午晚餐
10
1056012
329
20
710294
533
30
908269
2002
40
3751977
2704
50
5740729
2072
4人午/晚自助
10
379241
131
20
67288
68
30
262716
432
40
585234
414
50
885432
536
6人午/晚自助
10
23040
8
30
154833
112
40
67452
142
50
261286
245
单人下午自助烤肉
10
324976
98
20
33480
20
30
724500
208
40
581765
144
50
713690
169
单人午/晚自助
30
24240
10
40
43201
27
50
40980
30
单人午晚餐
10
223428
106
20
666399
298
30
688210
1215
40
2715213
1208
50
2501278
1093
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
13130
10
30
3278
46
40
5482
66
50
6928
87
周一至周五自助烤肉,免费WiFi
50
1632
22
学生专享午晚自助
10
134442
101
20
306155
191
30
386816
529
40
1041763
954
50
2092008
863
# aggfunc 可以传入多个参数
pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘,aggfunc=[np.sum,len,np.mean])
sum
len
mean
readCnt
readCnt
readCnt
menu
star
2人午晚餐
10
1056012
329
3209.762918
20
710294
533
1332.634146
30
908269
2002
453.680819
40
3751977
2704
1387.565459
50
5740729
2072
2770.622104
4人午/晚自助
10
379241
131
2894.969466
20
67288
68
989.529412
30
262716
432
608.138889
40
585234
414
1413.608696
50
885432
536
1651.925373
6人午/晚自助
10
23040
8
2880.000000
30
154833
112
1382.437500
40
67452
142
475.014085
50
261286
245
1066.473469
单人下午自助烤肉
10
324976
98
3316.081633
20
33480
20
1674.000000
30
724500
208
3483.173077
40
581765
144
4040.034722
50
713690
169
4223.017751
单人午/晚自助
30
24240
10
2424.000000
40
43201
27
1600.037037
50
40980
30
1366.000000
单人午晚餐
10
223428
106
2107.811321
20
666399
298
2236.238255
30
688210
1215
566.427984
40
2715213
1208
2247.692881
50
2501278
1093
2288.451967
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
13130
10
1313.000000
30
3278
46
71.260870
40
5482
66
83.060606
50
6928
87
79.632184
周一至周五自助烤肉,免费WiFi
50
1632
22
74.181818
学生专享午晚自助
10
134442
101
1331.108911
20
306155
191
1602.905759
30
386816
529
731.221172
40
1041763
954
1091.994759
50
2092008
863
2424.111240
传入columns参数
# 同时我们可以利用columns传入参数,通常传入的都是category类型的字段,这样可以分析针对这个字段下,values对应列的各个aggfunc函数,例如
pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘,columns=‘userLevel‘,aggfunc=[np.sum,len])
sum
len
userLevel
0
1
2
3
4
5
6
0
1
2
3
4
5
6
menu
star
2人午晚餐
10
258020.0
17404.0
556200.0
167428.0
56960.0
NaN
NaN
50.0
19.0
100.0
100.0
60.0
NaN
NaN
20
139630.0
70824.0
291639.0
143281.0
64920.0
NaN
NaN
105.0
48.0
157.0
143.0
80.0
NaN
NaN
30
136235.0
44579.0
74229.0
384310.0
256611.0
10165.0
2140.0
508.0
232.0
350.0
620.0
204.0
68.0
20.0
40
943979.0
143525.0
1037331.0
555754.0
1050919.0
12825.0
7644.0
479.0
282.0
678.0
694.0
481.0
78.0
12.0
50
1028106.0
910589.0
194753.0
1339691.0
2190625.0
9505.0
67460.0
207.0
237.0
441.0
725.0
351.0
67.0
44.0
4人午/晚自助
10
225540.0
NaN
137293.0
16408.0
NaN
NaN
NaN
60.0
NaN
57.0
14.0
NaN
NaN
NaN
20
20628.0
NaN
NaN
15860.0
30800.0
NaN
NaN
28.0
NaN
NaN
20.0
20.0
NaN
NaN
30
64636.0
NaN
36427.0
133200.0
18794.0
9659.0
NaN
72.0
NaN
133.0
138.0
58.0
31.0
NaN
40
272260.0
NaN
158807.0
56781.0
44983.0
NaN
52403.0
20.0
NaN
146.0
137.0
98.0
NaN
13.0
50
564533.0
NaN
25130.0
201899.0
77930.0
10240.0
5700.0
79.0
NaN
95.0
205.0
90.0
47.0
20.0
6人午/晚自助
10
NaN
NaN
NaN
23040.0
NaN
NaN
NaN
NaN
NaN
NaN
8.0
NaN
NaN
NaN
30
7800.0
NaN
22551.0
81846.0
42636.0
NaN
NaN
20.0
NaN
35.0
38.0
19.0
NaN
NaN
40
NaN
NaN
7345.0
11150.0
28780.0
20177.0
NaN
NaN
NaN
27.0
39.0
37.0
39.0
NaN
50
7560.0
NaN
11476.0
122220.0
38064.0
13086.0
68880.0
18.0
NaN
38.0
98.0
56.0
15.0
20.0
单人下午自助烤肉
10
NaN
196536.0
NaN
128440.0
NaN
NaN
NaN
NaN
78.0
NaN
20.0
NaN
NaN
NaN
20
33480.0
NaN
NaN
NaN
NaN
NaN
NaN
20.0
NaN
NaN
NaN
NaN
NaN
NaN
30
615033.0
NaN
68015.0
472.0
40980.0
NaN
NaN
101.0
NaN
65.0
2.0
40.0
NaN
NaN
40
322580.0
28460.0
14442.0
205620.0
10663.0
NaN
NaN
40.0
20.0
16.0
60.0
8.0
NaN
NaN
50
22500.0
NaN
657928.0
18242.0
15020.0
NaN
NaN
20.0
NaN
108.0
21.0
20.0
NaN
NaN
单人午/晚自助
30
24240.0
NaN
NaN
NaN
NaN
NaN
NaN
10.0
NaN
NaN
NaN
NaN
NaN
NaN
40
NaN
NaN
40681.0
2520.0
NaN
NaN
NaN
NaN
NaN
17.0
10.0
NaN
NaN
NaN
50
NaN
NaN
NaN
10760.0
30220.0
NaN
NaN
NaN
NaN
NaN
10.0
20.0
NaN
NaN
单人午晚餐
10
89260.0
NaN
NaN
75968.0
38200.0
20000.0
NaN
40.0
NaN
NaN
36.0
20.0
10.0
NaN
20
26710.0
51900.0
359680.0
51328.0
166447.0
10334.0
NaN
30.0
40.0
80.0
40.0
107.0
1.0
NaN
30
122043.0
45679.0
111660.0
195120.0
167446.0
46262.0
NaN
289.0
96.0
289.0
267.0
228.0
46.0
NaN
40
160276.0
210574.0
108343.0
1961559.0
116063.0
158398.0
NaN
185.0
81.0
263.0
450.0
157.0
72.0
NaN
50
423175.0
532911.0
81259.0
1174165.0
80857.0
200272.0
8639.0
145.0
129.0
200.0
357.0
108.0
127.0
27.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
20
NaN
NaN
13130.0
NaN
NaN
NaN
NaN
NaN
NaN
10.0
NaN
NaN
NaN
NaN
30
369.0
NaN
2144.0
765.0
NaN
NaN
NaN
3.0
NaN
28.0
15.0
NaN
NaN
NaN
40
1967.0
NaN
NaN
NaN
3515.0
NaN
NaN
25.0
NaN
NaN
NaN
41.0
NaN
NaN
50
1602.0
NaN
1387.0
2148.0
840.0
951.0
NaN
18.0
NaN
15.0
28.0
12.0
14.0
NaN
周一至周五自助烤肉,免费WiFi
50
420.0
1212.0
NaN
NaN
NaN
NaN
NaN
10.0
12.0
NaN
NaN
NaN
NaN
NaN
学生专享午晚自助
10
67546.0
40276.0
6538.0
20082.0
NaN
NaN
NaN
37.0
42.0
7.0
15.0
NaN
NaN
NaN
20
89080.0
NaN
54380.0
147675.0
NaN
15020.0
NaN
40.0
NaN
40.0
91.0
NaN
20.0
NaN
30
38524.0
175981.0
119230.0
43321.0
4340.0
5420.0
NaN
134.0
77.0
134.0
144.0
20.0
20.0
NaN
40
95021.0
56070.0
290879.0
193114.0
379548.0
27131.0
NaN
105.0
49.0
209.0
346.0
174.0
71.0
NaN
50
102935.0
NaN
812392.0
302126.0
734360.0
8620.0
131575.0
189.0
NaN
269.0
210.0
136.0
40.0
19.0
生成的DataFrame可以导出excel或csv文件
# pd.pivot_table(df,index=[‘menu‘,‘star‘],values=‘readCnt‘,columns=‘userLevel‘,aggfunc=[np.sum,len]).to_excel(‘pivot_table.xlsx‘)
# 这里生成的是DataFrame结构,可以直接将结果导出生成excel或者csv文件
修改index中的数据类型,显示完整的索引列
# 我们可以总结一下,index中一般是category类型,columns也是category类型,当然可以是能够代表category的数值,比如这里的离散数值,
# values中一般是数值类型,aggfunc针对values中的值进行计算,这里我们可以
# 更改index与columns中的字段,并通过数据类型的变换,则可以将index中显示不全的信息显示完整。
df[‘menu‘]=df[‘menu‘].astype(‘category‘)
df[‘userLevel‘]=df[‘userLevel‘].astype(‘category‘)
df[‘star‘]=df[‘star‘].astype(‘category‘)
pd.pivot_table(df,index=[‘menu‘,‘userLevel‘],values=‘readCnt‘,columns=‘star‘,aggfunc=[np.sum,len])
sum
len
star
10
20
30
40
50
10
20
30
40
50
menu
userLevel
2人午晚餐
0
258020.0
139630.0
136235.0
943979.0
1028106.0
50.0
105.0
508.0
479.0
207.0
1
17404.0
70824.0
44579.0
143525.0
910589.0
19.0
48.0
232.0
282.0
237.0
2
556200.0
291639.0
74229.0
1037331.0
194753.0
100.0
157.0
350.0
678.0
441.0
3
167428.0
143281.0
384310.0
555754.0
1339691.0
100.0
143.0
620.0
694.0
725.0
4
56960.0
64920.0
256611.0
1050919.0
2190625.0
60.0
80.0
204.0
481.0
351.0
5
NaN
NaN
10165.0
12825.0
9505.0
NaN
NaN
68.0
78.0
67.0
6
NaN
NaN
2140.0
7644.0
67460.0
NaN
NaN
20.0
12.0
44.0
4人午/晚自助
0
225540.0
20628.0
64636.0
272260.0
564533.0
60.0
28.0
72.0
20.0
79.0
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2
137293.0
NaN
36427.0
158807.0
25130.0
57.0
NaN
133.0
146.0
95.0
3
16408.0
15860.0
133200.0
56781.0
201899.0
14.0
20.0
138.0
137.0
205.0
4
NaN
30800.0
18794.0
44983.0
77930.0
NaN
20.0
58.0
98.0
90.0
5
NaN
NaN
9659.0
NaN
10240.0
NaN
NaN
31.0
NaN
47.0
6
NaN
NaN
NaN
52403.0
5700.0
NaN
NaN
NaN
13.0
20.0
6人午/晚自助
0
NaN
NaN
7800.0
NaN
7560.0
NaN
NaN
20.0
NaN
18.0
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2
NaN
NaN
22551.0
7345.0
11476.0
NaN
NaN
35.0
27.0
38.0
3
23040.0
NaN
81846.0
11150.0
122220.0
8.0
NaN
38.0
39.0
98.0
4
NaN
NaN
42636.0
28780.0
38064.0
NaN
NaN
19.0
37.0
56.0
5
NaN
NaN
NaN
20177.0
13086.0
NaN
NaN
NaN
39.0
15.0
6
NaN
NaN
NaN
NaN
68880.0
NaN
NaN
NaN
NaN
20.0
单人下午自助烤肉
0
NaN
33480.0
615033.0
322580.0
22500.0
NaN
20.0
101.0
40.0
20.0
1
196536.0
NaN
NaN
28460.0
NaN
78.0
NaN
NaN
20.0
NaN
2
NaN
NaN
68015.0
14442.0
657928.0
NaN
NaN
65.0
16.0
108.0
3
128440.0
NaN
472.0
205620.0
18242.0
20.0
NaN
2.0
60.0
21.0
4
NaN
NaN
40980.0
10663.0
15020.0
NaN
NaN
40.0
8.0
20.0
5
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
单人午/晚自助
0
NaN
NaN
24240.0
NaN
NaN
NaN
NaN
10.0
NaN
NaN
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
...
...
...
...
...
...
...
...
...
...
...
5
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
单人午晚餐
0
89260.0
26710.0
122043.0
160276.0
423175.0
40.0
30.0
289.0
185.0
145.0
1
NaN
51900.0
45679.0
210574.0
532911.0
NaN
40.0
96.0
81.0
129.0
2
NaN
359680.0
111660.0
108343.0
81259.0
NaN
80.0
289.0
263.0
200.0
3
75968.0
51328.0
195120.0
1961559.0
1174165.0
36.0
40.0
267.0
450.0
357.0
4
38200.0
166447.0
167446.0
116063.0
80857.0
20.0
107.0
228.0
157.0
108.0
5
20000.0
10334.0
46262.0
158398.0
200272.0
10.0
1.0
46.0
72.0
127.0
6
NaN
NaN
NaN
NaN
8639.0
NaN
NaN
NaN
NaN
27.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
NaN
NaN
369.0
1967.0
1602.0
NaN
NaN
3.0
25.0
18.0
1
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2
NaN
13130.0
2144.0
NaN
1387.0
NaN
10.0
28.0
NaN
15.0
3
NaN
NaN
765.0
NaN
2148.0
NaN
NaN
15.0
NaN
28.0
4
NaN
NaN
NaN
3515.0
840.0
NaN
NaN
NaN
41.0
12.0
5
NaN
NaN
NaN
NaN
951.0
NaN
NaN
NaN
NaN
14.0
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
周一至周五自助烤肉,免费WiFi
0
NaN
NaN
NaN
NaN
420.0
NaN
NaN
NaN
NaN
10.0
1
NaN
NaN
NaN
NaN
1212.0
NaN
NaN
NaN
NaN
12.0
2
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
3
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
4
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
5
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
6
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
学生专享午晚自助
0
67546.0
89080.0
38524.0
95021.0
102935.0
37.0
40.0
134.0
105.0
189.0
1
40276.0
NaN
175981.0
56070.0
NaN
42.0
NaN
77.0
49.0
NaN
2
6538.0
54380.0
119230.0
290879.0
812392.0
7.0
40.0
134.0
209.0
269.0
3
20082.0
147675.0
43321.0
193114.0
302126.0
15.0
91.0
144.0
346.0
210.0
4
NaN
NaN
4340.0
379548.0
734360.0
NaN
NaN
20.0
174.0
136.0
5
NaN
15020.0
5420.0
27131.0
8620.0
NaN
20.0
20.0
71.0
40.0
6
NaN
NaN
NaN
NaN
131575.0
NaN
NaN
NaN
NaN
19.0
63 rows × 10 columns
传入fill_value参数 ,处理缺失值
# 上面的例子虽然将index显示完整了,但是仍然有很多缺失值NaN(not a number),显示在这里给人感觉不舒服的话,可以在参数中传入fill_value,例如
pd.pivot_table(df,index=[‘userLevel‘,‘menu‘],values=‘readCnt‘,columns=‘star‘,aggfunc=[np.sum,len],fill_value=0)
sum
len
star
10
20
30
40
50
10
20
30
40
50
userLevel
menu
0
2人午晚餐
258020
139630
136235
943979
1028106
50
105
508
479
207
4人午/晚自助
225540
20628
64636
272260
564533
60
28
72
20
79
6人午/晚自助
0
0
7800
0
7560
0
0
20
0
18
单人下午自助烤肉
0
33480
615033
322580
22500
0
20
101
40
20
单人午/晚自助
0
0
24240
0
0
0
0
10
0
0
单人午晚餐
89260
26710
122043
160276
423175
40
30
289
185
145
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
369
1967
1602
0
0
3
25
18
周一至周五自助烤肉,免费WiFi
0
0
0
0
420
0
0
0
0
10
学生专享午晚自助
67546
89080
38524
95021
102935
37
40
134
105
189
1
2人午晚餐
17404
70824
44579
143525
910589
19
48
232
282
237
4人午/晚自助
0
0
0
0
0
0
0
0
0
0
6人午/晚自助
0
0
0
0
0
0
0
0
0
0
单人下午自助烤肉
196536
0
0
28460
0
78
0
0
20
0
单人午/晚自助
0
0
0
0
0
0
0
0
0
0
单人午晚餐
0
51900
45679
210574
532911
0
40
96
81
129
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
0
0
0
0
0
0
周一至周五自助烤肉,免费WiFi
0
0
0
0
1212
0
0
0
0
12
学生专享午晚自助
40276
0
175981
56070
0
42
0
77
49
0
2
2人午晚餐
556200
291639
74229
1037331
194753
100
157
350
678
441
4人午/晚自助
137293
0
36427
158807
25130
57
0
133
146
95
6人午/晚自助
0
0
22551
7345
11476
0
0
35
27
38
单人下午自助烤肉
0
0
68015
14442
657928
0
0
65
16
108
单人午/晚自助
0
0
0
40681
0
0
0
0
17
0
单人午晚餐
0
359680
111660
108343
81259
0
80
289
263
200
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
13130
2144
0
1387
0
10
28
0
15
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
0
0
0
0
0
学生专享午晚自助
6538
54380
119230
290879
812392
7
40
134
209
269
3
2人午晚餐
167428
143281
384310
555754
1339691
100
143
620
694
725
4人午/晚自助
16408
15860
133200
56781
201899
14
20
138
137
205
6人午/晚自助
23040
0
81846
11150
122220
8
0
38
39
98
...
...
...
...
...
...
...
...
...
...
...
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
765
0
2148
0
0
15
0
28
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
0
0
0
0
0
学生专享午晚自助
20082
147675
43321
193114
302126
15
91
144
346
210
4
2人午晚餐
56960
64920
256611
1050919
2190625
60
80
204
481
351
4人午/晚自助
0
30800
18794
44983
77930
0
20
58
98
90
6人午/晚自助
0
0
42636
28780
38064
0
0
19
37
56
单人下午自助烤肉
0
0
40980
10663
15020
0
0
40
8
20
单人午/晚自助
0
0
0
0
30220
0
0
0
0
20
单人午晚餐
38200
166447
167446
116063
80857
20
107
228
157
108
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
3515
840
0
0
0
41
12
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
0
0
0
0
0
学生专享午晚自助
0
0
4340
379548
734360
0
0
20
174
136
5
2人午晚餐
0
0
10165
12825
9505
0
0
68
78
67
4人午/晚自助
0
0
9659
0
10240
0
0
31
0
47
6人午/晚自助
0
0
0
20177
13086
0
0
0
39
15
单人下午自助烤肉
0
0
0
0
0
0
0
0
0
0
单人午/晚自助
0
0
0
0
0
0
0
0
0
0
单人午晚餐
20000
10334
46262
158398
200272
10
1
46
72
127
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
951
0
0
0
0
14
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
0
0
0
0
0
学生专享午晚自助
0
15020
5420
27131
8620
0
20
20
71
40
6
2人午晚餐
0
0
2140
7644
67460
0
0
20
12
44
4人午/晚自助
0
0
0
52403
5700
0
0
0
13
20
6人午/晚自助
0
0
0
0
68880
0
0
0
0
20
单人下午自助烤肉
0
0
0
0
0
0
0
0
0
0
单人午/晚自助
0
0
0
0
0
0
0
0
0
0
单人午晚餐
0
0
0
0
8639
0
0
0
0
27
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
0
0
0
0
0
0
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
0
0
0
0
0
学生专享午晚自助
0
0
0
0
131575
0
0
0
0
19
63 rows × 10 columns
设添加margins参数,定margin_name名称
pd.pivot_table(df,index=[‘userLevel‘,‘menu‘],values=‘readCnt‘,columns=‘star‘,aggfunc=[len],fill_value=0,margins=True,margins_name=‘总计‘)
# 显示总计
len
star
10
20
30
40
50
总计
userLevel
menu
0
2人午晚餐
50
105
508
479
207
1349.0
4人午/晚自助
60
28
72
20
79
259.0
6人午/晚自助
0
0
20
0
18
38.0
单人下午自助烤肉
0
20
101
40
20
181.0
单人午/晚自助
0
0
10
0
0
10.0
单人午晚餐
40
30
289
185
145
689.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
3
25
18
46.0
周一至周五自助烤肉,免费WiFi
0
0
0
0
10
10.0
学生专享午晚自助
37
40
134
105
189
505.0
1
2人午晚餐
19
48
232
282
237
818.0
4人午/晚自助
0
0
0
0
0
NaN
6人午/晚自助
0
0
0
0
0
NaN
单人下午自助烤肉
78
0
0
20
0
98.0
单人午/晚自助
0
0
0
0
0
NaN
单人午晚餐
0
40
96
81
129
346.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
0
NaN
周一至周五自助烤肉,免费WiFi
0
0
0
0
12
12.0
学生专享午晚自助
42
0
77
49
0
168.0
2
2人午晚餐
100
157
350
678
441
1726.0
4人午/晚自助
57
0
133
146
95
431.0
6人午/晚自助
0
0
35
27
38
100.0
单人下午自助烤肉
0
0
65
16
108
189.0
单人午/晚自助
0
0
0
17
0
17.0
单人午晚餐
0
80
289
263
200
832.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
10
28
0
15
53.0
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
NaN
学生专享午晚自助
7
40
134
209
269
659.0
3
2人午晚餐
100
143
620
694
725
2282.0
4人午/晚自助
14
20
138
137
205
514.0
6人午/晚自助
8
0
38
39
98
183.0
...
...
...
...
...
...
...
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
NaN
学生专享午晚自助
15
91
144
346
210
806.0
4
2人午晚餐
60
80
204
481
351
1176.0
4人午/晚自助
0
20
58
98
90
266.0
6人午/晚自助
0
0
19
37
56
112.0
单人下午自助烤肉
0
0
40
8
20
68.0
单人午/晚自助
0
0
0
0
20
20.0
单人午晚餐
20
107
228
157
108
620.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
41
12
53.0
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
NaN
学生专享午晚自助
0
0
20
174
136
330.0
5
2人午晚餐
0
0
68
78
67
213.0
4人午/晚自助
0
0
31
0
47
78.0
6人午/晚自助
0
0
0
39
15
54.0
单人下午自助烤肉
0
0
0
0
0
NaN
单人午/晚自助
0
0
0
0
0
NaN
单人午晚餐
10
1
46
72
127
256.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
14
14.0
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
NaN
学生专享午晚自助
0
20
20
71
40
151.0
6
2人午晚餐
0
0
20
12
44
76.0
4人午/晚自助
0
0
0
13
20
33.0
6人午/晚自助
0
0
0
0
20
20.0
单人下午自助烤肉
0
0
0
0
0
NaN
单人午/晚自助
0
0
0
0
0
NaN
单人午晚餐
0
0
0
0
27
27.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
0
0
0
0
0
NaN
周一至周五自助烤肉,免费WiFi
0
0
0
0
0
NaN
学生专享午晚自助
0
0
0
0
19
19.0
总计
773
1120
4554
5659
5117
17223.0
64 rows × 6 columns
aggfunc传入字典,规定单个字段对应的聚合函数
df[‘star‘]=df[‘star‘].astype("int")
pd.pivot_table(df,index=[‘menu‘],columns=["userLevel"],values=["readCnt",‘star‘],
aggfunc={"star":len,"readCnt":[np.sum]},fill_value=0)
# 可以aggfunc函数传入一个字典,规定单个字段对应的聚合函数
readCnt
star
sum
len
userLevel
0
1
2
3
4
5
6
0
1
2
3
4
5
6
menu
2人午晚餐
2505970
1186921
2154152
2590464
3620035
32495
77244
1349
818
1726
2282
1176
213
76
4人午/晚自助
1147597
0
357657
424148
172507
19899
58103
259
0
431
514
266
78
33
6人午/晚自助
15360
0
41372
238256
109480
33263
68880
38
0
100
183
112
54
20
单人下午自助烤肉
993593
224996
740385
352774
66663
0
0
181
98
189
103
68
0
0
单人午/晚自助
24240
0
40681
13280
30220
0
0
10
0
17
20
20
0
0
单人午晚餐
821464
841064
660942
3458140
569013
435266
8639
689
346
832
1150
620
256
27
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
3938
0
16661
2913
4355
951
0
46
0
53
43
53
14
0
周一至周五自助烤肉,免费WiFi
420
1212
0
0
0
0
0
10
12
0
0
0
0
0
学生专享午晚自助
393106
272327
1283419
706318
1118248
56191
131575
505
168
659
806
330
151
19
可以使用query 进行查询数据
table=pd.pivot_table(df,index=[‘menu‘],columns=["userLevel"],values=["readCnt",‘star‘],
aggfunc={"star":len,"readCnt":[np.sum]})
table
readCnt
star
sum
len
userLevel
0
1
2
3
4
5
6
0
1
2
3
4
5
6
menu
2人午晚餐
2505970.0
1186921.0
2154152.0
2590464.0
3620035.0
32495.0
77244.0
1349.0
818.0
1726.0
2282.0
1176.0
213.0
76.0
4人午/晚自助
1147597.0
NaN
357657.0
424148.0
172507.0
19899.0
58103.0
259.0
NaN
431.0
514.0
266.0
78.0
33.0
6人午/晚自助
15360.0
NaN
41372.0
238256.0
109480.0
33263.0
68880.0
38.0
NaN
100.0
183.0
112.0
54.0
20.0
单人下午自助烤肉
993593.0
224996.0
740385.0
352774.0
66663.0
NaN
NaN
181.0
98.0
189.0
103.0
68.0
NaN
NaN
单人午/晚自助
24240.0
NaN
40681.0
13280.0
30220.0
NaN
NaN
10.0
NaN
17.0
20.0
20.0
NaN
NaN
单人午晚餐
821464.0
841064.0
660942.0
3458140.0
569013.0
435266.0
8639.0
689.0
346.0
832.0
1150.0
620.0
256.0
27.0
周一至周五自助烤肉/周六日及节假日自助烤肉2选1
3938.0
NaN
16661.0
2913.0
4355.0
951.0
NaN
46.0
NaN
53.0
43.0
53.0
14.0
NaN
周一至周五自助烤肉,免费WiFi
420.0
1212.0
NaN
NaN
NaN
NaN
NaN
10.0
12.0
NaN
NaN
NaN
NaN
NaN
学生专享午晚自助
393106.0
272327.0
1283419.0
706318.0
1118248.0
56191.0
131575.0
505.0
168.0
659.0
806.0
330.0
151.0
19.0
高级的透视表查询语句
table.query("menu==[‘2人午晚餐‘,‘单人午晚餐‘]")
readCnt
star
sum
len
userLevel
0
1
2
3
4
5
6
0
1
2
3
4
5
6
menu
2人午晚餐
2505970.0
1186921.0
2154152.0
2590464.0
3620035.0
32495.0
77244.0
1349.0
818.0
1726.0
2282.0
1176.0
213.0
76.0
单人午晚餐
821464.0
841064.0
660942.0
3458140.0
569013.0
435266.0
8639.0
689.0
346.0
832.0
1150.0
620.0
256.0
27.0
至此,pandas中的透视表的功能实例实现完成 以上是关于pandas pivot_table 活学活用实例教程的主要内容,如果未能解决你的问题,请参考以下文章
活学活用 screen
活学活用wxPython基础框架
活学活用flex制骰子
活学活用flex制骰子
活学活用flex制骰子
xhost命令详解(活学活用)