文章目录

  • pandas__任务4.5 创建透视表与交叉表
  • 4.5 创建透视表与交叉表
    • 代码4-67 使用订单号作为透视表索引制作透视表
    • 代码 4-68 修改聚合函数后的透视表
    • 代码 4-69 使用订单号和菜品名称作为索引的透视表
    • 代码 4-70 指定菜品名称为列分组键的透视表
    • 代码 4-71 指定某些列制作透视表
    • 代码 4-72 对透视表中的缺失值进行填充
    • 代码 4-73 在透视表中添加汇总数据
  • 4.5.2 使用crosstab函数创建交叉表
    • 代码 4-74 使用crosstab函数制作交叉表
    • 代码 4-75 订单详情表单日菜品成交总额与总数透视表
    • 代码 4-76 订单详情表单个菜品单日成交总额透视表

pandas__任务4.5 创建透视表与交叉表

[ipynb格式浏览

4.5 创建透视表与交叉表

import pandas as pd
import numpy as np
from sqlalchemy import create_engine

代码4-67 使用订单号作为透视表索引制作透视表

%%html
<img src='./image/1.png', width=900, height=400>

<img src=’./image/1.png’, width=900, height=400>

engine = create_engine('mysql+pymysql://root:123456@localhost:3306/zuoye')
detail = pd.read_sql_table('meal_order_detail1',con = engine)
detailPivot = pd.pivot_table(detail[['order_id','counts','amounts']],index = 'order_id')
print('以order_id作为分组键创建的订单透视表为:\n',detailPivot.head())
D:\Study\anaconda\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 1")result = self._query(query)以order_id作为分组键创建的订单透视表为:amounts  counts
order_id
1002       32.000  1.0000
1003       30.125  1.2500
1004       43.875  1.0625
1008       63.000  1.0000
1011       57.700  1.0000

在不特殊指定聚合函数aggfunc时,会默认使用numpy.mean进行聚合运算,numpy.mean会自动过滤掉非数值类型数据。可以通过指定aggfunc参数修改聚合函数。

代码 4-68 修改聚合函数后的透视表

detailPivot1 = pd.pivot_table(detail[['order_id','counts','amounts']],index = 'order_id',aggfunc = np.sum)
print('以order_id作为分组键创建的订单销量与售价总和透视表为:\n',detailPivot1.head())
以order_id作为分组键创建的订单销量与售价总和透视表为:amounts  counts
order_id
1002        224.0     7.0
1003        241.0    10.0
1004        702.0    17.0
1008        315.0     5.0
1011        577.0    10.0

和groupby方法分组的时候相同,pivot_table函数在创建透视表的时候分组键index可以有多个。

代码 4-69 使用订单号和菜品名称作为索引的透视表

detailPivot2 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],index = ['order_id','dishes_name'],aggfunc = np.sum)
print('以order_id和dishes_name作为分组键创建的订单\
销量与售价总和透视表为:\n',detailPivot2.head())
以order_id和dishes_name作为分组键创建的订单销量与售价总和透视表为:amounts  counts
order_id dishes_name
1002     凉拌菠菜            27.0     1.0南瓜枸杞小饼干         19.0     1.0焖猪手             58.0     1.0独家薄荷鲜虾牛肉卷       45.0     1.0白胡椒胡萝卜羊肉汤       35.0     1.0

通过设置columns参数可以指定列分组。

代码 4-70 指定菜品名称为列分组键的透视表

detailPivot2 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],index = 'order_id',columns = 'dishes_name',aggfunc = np.sum)
print('以order_id和dishes_name作为行列分组键创建的\
透视表前5行4列为:\n',detailPivot2.iloc[:5,:4])
以order_id和dishes_name作为行列分组键创建的透视表前5行4列为:amounts
dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒
order_id
1002            NaN     NaN     NaN     NaN
1003            NaN     NaN     NaN     NaN
1004            NaN     NaN     NaN     NaN
1008            NaN     NaN     NaN     NaN
1011           99.0     NaN     NaN     NaN

当全部数据列数很多时,若只想要显示某列,可以通过指定values参数来实现。

代码 4-71 指定某些列制作透视表

detailPivot4 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],index = 'order_id',values = ['counts','amounts'],aggfunc = np.sum)
print('以order_id作为行分组键counts作为值创建的\
透视表前5行为:\n',detailPivot4.head())
以order_id作为行分组键counts作为值创建的透视表前5行为:amounts  counts
order_id
1002        224.0     7.0
1003        241.0    10.0
1004        702.0    17.0
1008        315.0     5.0
1011        577.0    10.0

当某些数据不存在时,会自动填充NaN,因此可以指定fill_value参数,表示当存在缺失值时,以指定数值进行填充。

代码 4-72 对透视表中的缺失值进行填充

detailPivot5 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],index = 'order_id',columns = 'dishes_name',aggfunc = np.sum,fill_value = 0)
print('空值填0后以order_id和dishes_name为行列分组键\
创建透视表前5行4列为:\n',detailPivot5.iloc[:5,:4])
空值填0后以order_id和dishes_name为行列分组键创建透视表前5行4列为:amounts
dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒
order_id
1002              0       0       0       0
1003              0       0       0       0
1004              0       0       0       0
1008              0       0       0       0
1011             99       0       0       0

可以更改margins参数,查看汇总数据。

代码 4-73 在透视表中添加汇总数据

detailPivot6 = pd.pivot_table(detail[['order_id','dishes_name','counts','amounts']],index = 'order_id',columns = 'dishes_name',aggfunc = np.sum,fill_value = 0,margins = True)
print('添加margins后以order_id和dishes_name为分组键\
的透视表前5行后4列为:\n',detailPivot6.iloc[:5,-4:])
添加margins后以order_id和dishes_name为分组键的透视表前5行后4列为:counts
dishes_name 黄油曲奇饼干 黄花菜炒木耳 黑米恋上葡萄   All
order_id
1002             0      0      0   7.0
1003             0      0      0  10.0
1004             0      1      0  17.0
1008             0      0      0   5.0
1011             0      0      0  10.0

4.5.2 使用crosstab函数创建交叉表

交叉表是一种特殊的透视表,主要用于计算分组频率。利用pandas提供的crosstab函数可以制作交叉表,crosstab函数的常用参数和使用格式如下。

%%html
<img src='./image/2.png', width=900, height=400>

<img src=’./image/2.png’, width=900, height=400>

由于交叉表是透视表的一种,其参数基本保持一致,不同之处在于crosstab函数中的index,columns,values填入的都是对应的从Dataframe中取出的某一列。
pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

代码 4-74 使用crosstab函数制作交叉表

detailCross = pd.crosstab(index=detail['order_id'],columns = detail['dishes_name'],values = detail['counts'],aggfunc = np.sum)
print('以order_id和dishes_name为分组键\
counts为值的透视表前5行5列为:\n',detailCross.iloc[:5,:5])
以order_id和dishes_name为分组键counts为值的透视表前5行5列为:dishes_name   42度海之蓝   北冰洋汽水   38度剑南春   50度古井贡酒  52度泸州老窖
order_id
1002             NaN      NaN      NaN      NaN       NaN
1003             NaN      NaN      NaN      NaN       NaN
1004             NaN      NaN      NaN      NaN       NaN
1008             NaN      NaN      NaN      NaN       NaN
1011             1.0      NaN      NaN      NaN       NaN

代码 4-75 订单详情表单日菜品成交总额与总数透视表

detail['place_order_time'] = pd.to_datetime(detail['place_order_time'])
detail['date'] = [i.date() for i in detail['place_order_time']]
PivotDetail = pd.pivot_table(detail[['date','dishes_name','counts','amounts']],index ='date',aggfunc = np.sum,margins = True)
print('订单详情表单日菜品成交总额与总数透视表前5行5列为:\n',PivotDetail.head())
订单详情表单日菜品成交总额与总数透视表前5行5列为:amounts  counts
date
2016-08-01   9366.0   233.0
2016-08-02   6125.0   151.0
2016-08-03   6890.0   192.0
2016-08-04   7549.0   169.0
2016-08-05   8671.0   224.0

代码 4-76 订单详情表单个菜品单日成交总额透视表

CrossDetail = pd.crosstab(index=detail['date'],columns=detail['dishes_name'],values = detail['amounts'],aggfunc = np.sum,margins = True)
print('订单详情表单日单个菜品成交总额交叉表后5行5列为:\n',CrossDetail.iloc[-5:,-5:])
订单详情表单日单个菜品成交总额交叉表后5行5列为:dishes_name  黄尾袋鼠西拉子红葡萄酒  黄油曲奇饼干  黄花菜炒木耳  黑米恋上葡萄       All
date
2016-08-07         230.0    32.0   105.0    99.0   31306.0
2016-08-08          46.0     NaN     NaN    33.0    6532.0
2016-08-09         138.0     NaN    35.0    99.0    7155.0
2016-08-10          46.0     NaN    70.0    33.0   10231.0
All                736.0    80.0   525.0   561.0  125992.0

Pandas 统计分析基础 笔记5 _任务4.5 创建透视表与交叉表相关推荐

  1. Pandas 统计分析基础 笔记4 任务4.4 使用分组聚合进行组内计算

    文章目录 pandas_任务4.4 使用分组聚合进行组内计算 4.4.1 使用groupby方法拆分数据 代码 4-51 对菜品订单详情表依据订单编号分组 代码 4-52 GroupBy 类求均值,标 ...

  2. Pandas 统计分析基础 笔记2 任务4.2 掌握DataFrame的常用操作

    文章目录 pandas_任务4.2 掌握DataFrame的常用操作 代码4-12 订单详情表的4个基本属性 4-13 size,ndim,shape属性的使用 4-14 使用T属性进行转置 4-15 ...

  3. 数据科学与python——Pandas统计分析基础(数据堆叠+数据清洗)

    Pandas统计分析基础数据堆叠+数据清洗 一.合并数据:获取完整的数据集. 1.读取数据 2.将两个csv文件按照mete.csv文件的日期对齐 3.纵向合并数据data1与data2 4.使用dr ...

  4. 数据科学与python语言——Pandas统计分析基础(时间转换+聚合)

    Pandas统计分析基础(时间转换+聚合) 实验要求一 实验二要求 全部代码 实验要求一 #M表的时间戳类型转为datetime data_Mete['TIMESTAMP']=pd.to_dateti ...

  5. 【python与数据分析】Pandas统计分析基础

    目录 前言 一.pandas常用数据类型 综述 1.一维数组(Series)与常用操作 (1) 通过列表创建Series (2)创建Series时指定索引 (3)Series位置和标签的使用 (4)通 ...

  6. 【Python】开启Pandas进阶:图解Pandas透视表、交叉表

    一.图解Pandas透视表.交叉表 终于开始Pandas进阶内容的写作了.相信很多人都应该知道透视表,在Excel会经常去制作它,来实现数据的分组汇总统计.在Pandas中,我们把它称之为pivot_ ...

  7. 【Python】数据分析.pandas.透视表与交叉表

    文章目录 数据分析-pandas.透视表与交叉表 一.透视表 二.交叉表 三.任务实现 数据分析-pandas.透视表与交叉表 一.透视表 数据透视表是数据分析中常见的工具之一,根据一个或多个键值对数 ...

  8. 一文让你吃透!图解 pandas 透视表、交叉表!

    一.图解Pandas透视表.交叉表 终于开始Pandas进阶内容的写作了.相信很多人都应该知道透视表,在Excel会经常去制作它,来实现数据的分组汇总统计.在Pandas中,我们把它称之为pivot_ ...

  9. 第2关:Pandas创建透视表和交叉表

    任务描述 本关任务:使用Pandas加载tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间.每个星期下的小费总和情况. 相关知识 透视表 透视表是各种电子表格程序和其他数据分析软 ...

最新文章

  1. Planetary.js:帮助你构建超炫的互动球体效果
  2. 想法1 : 突然萌发的 “天时地利人和”-----优化
  3. 使用RFECV、递归特征消除 (Recursive Feature Elimination)进行特征筛选详解及实战
  4. 构造可靠数据传输协议
  5. mybatis解决 1 字节的 UTF-8 序列的字节 1 无效
  6. 基于图像灰度的模板匹配
  7. React开发(253):react项目理解 ant design ancher锚点
  8. nsq Android客户端,NSQ的golang客户端简单使用
  9. JAVA笔记:double四舍五入并保留两位小数的方法
  10. 泛型类,泛型接口,泛型方法,底层擦除机制,可变参数,限类型通配符,反编译xjad
  11. 为什么IEEE 1588如此精确呢?
  12. matlab各相关系数的计算,matlab 相关系数的计算
  13. 求平方根java实现
  14. 从幼苗长成大树 中美两国GIS软件技术已并驾齐驱
  15. 儿童学计算机编程好处,儿童学习编程有什么好处
  16. 在CityEngine中制作绘制路网
  17. mysql 备份库的shell_shell脚本之 备份mysql数据库
  18. 英文文本分类——电影评论情感判别
  19. 【C系列6.6】数组训练之金鱼
  20. ubuntu搭建vpn步骤

热门文章

  1. 子平真诠释疑笔记(一)
  2. win10打开计算机管理闪退,win10系统下任务管理器闪退的解决方法
  3. 单片机c语言led灯闪烁程序,单片机LED灯闪烁程序
  4. 项目经理的职责和权限分别是什么?
  5. Jsonviewer2 for Notepad++ 64 bit/位
  6. 金九银十,测试思维面试题最新整理
  7. uniapp 微信小程序获取map地图中心的经纬度地理位置
  8. 【更新ing】已有5个省份公布2020软考报名时间
  9. 【教程】简单5步教你手机制作寸照、证件照、照片回执
  10. Ubuntu18.04 安装NVIDIA英伟达驱动教程