- pandas pivot_table 活学活用实例教程
- 导入相关数据分析的库
- 首先进行commentTime时间进行数据预处理
- 查看数据类型信息
- 最简单的透视表
- 直接敲击该函数,在notebook中可以查看该函数的参数
- 多个索引列
- 特定列的统计
- 规定特定的聚合函数
- 传入多个聚合函数
- 传入columns参数
- 生成的DataFrame可以导出excel或csv文件
- 修改index中的数据类型,显示完整的索引列
- 传入fill_value参数,处理缺失值
- 设添加margins参数,定margin_name名称
- aggfunc传入字典,规定单个字段对应的聚合函数
- 可以使用query 进行查询数据
- 高级的透视表查询语句
- 至此,pandas中的透视表的功能实例实现完成
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()
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
多个索引列
# 实际上单个索引的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中的透视表的功能实例实现完成