- 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行
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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 |
首先进行commentTime时间进行数据预处理
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()
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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‘])
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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分的评价点赞数最多,很可能是因为一针见血的指出了该品类的真相。。
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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‘)
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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)
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead th { text-align: right }
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])
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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])
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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])
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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])
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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)
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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=‘总计‘)
# 显示总计
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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函数传入一个字典,规定单个字段对应的聚合函数
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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人午晚餐‘,‘单人午晚餐‘]")
.dataframe tbody tr th:only-of-type { vertical-align: middle }
.dataframe tbody tr th { vertical-align: top }
.dataframe thead tr th { text-align: left }
.dataframe thead tr:last-of-type th { text-align: right }
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中的透视表的功能实例实现完成
原文地址:https://www.cnblogs.com/onemorepoint/p/9508910.html