1 使用 povit_table 函数创建透视表

pivot_table 函数常用参数及其说明:

  • 利用 pivot_table 函数可以实现透视表,pivot_table()函数的常用参数及其使用格式如下。
    pands.pivot_table(data, values=None, index=None, columns=None, aggfunc=‘mean’, fill_value=None, margins=False, dropna=True, margins_name=‘All’)

    pivot_table 函数主要的参数调节:
  • 在不特殊指定聚合函数 aggfunc 时,会默认使用 numpy.mean 进行聚合运算,numpy.mean
    会自动过滤掉非数值类型数据。可以通过指定 aggfunc 参数修改聚合函数。
  • 和 groupby 方法分组的时候相同,pivot_table 函数在创建透视表的时候分组键 index 可以有多个。
  • 通过设置 columns 参数可以指定列分组。
  • 当全部数据列数很多时,若只想要显示某列,可以通过指定 values 参数来实现。
  • 当某些数据不存在时,会自动填充 NaN,因此可以指定 fill_value 参数,表示当存在缺失值时,以指定数值进行填充。
  • 可以更改 margins 参数,查看汇总数据。

2 使用 crosstab 函数创建交叉表

crosstab 函数:

  • 交叉表是一种特殊的透视表,主要用于计算分组频率。利用 pandas 提供的 crosstab 函数可以制作交叉表,crosstab 函数的常用参数和使用格式如下。
  • 由于交叉表是透视表的一种,其参数基本保持一致,不同之处在于 crosstab 函数中的index,columns,values 填入的都是对应的从 Dataframe 中取出的某一列。
    pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

crosstab 的常用参数及其说明:

Example:

import pandas as pd
import numpy as npdetail = pd.read_excel('meal_order_detail.xlsx')#透视表
#index=具体的列名 或者 index=[列名1,列名2]
detail_pivot = pd.pivot_table(detail[['order_id','counts','amounts']],index='order_id')
print('以order_id分组后创建透视表(均值):\n',detail_pivot.head())
'''
以order_id分组后创建透视表(均值):amounts    counts
order_id
137       32.333333  1.500000
165       52.944444  1.166667
166       48.200000  1.400000
171       36.285714  1.428571
177       34.250000  1.000000
'''#可以指定聚合函数
data = detail[['order_id','counts','amounts']]
detail_pivot = pd.pivot_table(data=data,index='order_id',aggfunc=np.sum)
print('以order_id分组后创建透视表(求和):\n',detail_pivot.head())
'''
以order_id分组后创建透视表(求和):amounts  counts
order_id
137           194       9
165           953      21
166           241       7
171           254      10
177           137       4
'''#index参数后面可以跟一个列表,表示按照多个列名进行分组
data = detail[['order_id','counts','amounts','dishes_name']]
result = pd.pivot_table(data=data,index=['order_id','dishes_name'],aggfunc=np.sum)
print('以order_id和dishes_name作为行分组键创建的透视表',result.head())
'''
以order_id和dishes_name作为行分组键创建的透视表                           amounts  counts
order_id dishes_name
137      农夫山泉NFC果汁100%橙汁        6       1凉拌菠菜                  27       1番茄炖牛腩\r\n             35       1白饭/小碗                  1       4西瓜胡萝卜沙拉               26       1
'''#列分组
result = pd.pivot_table(data=data,index='order_id',columns='dishes_name',aggfunc=np.sum)
print('以order_id为行分组键,以dishes_name为列分组键创建的透视表为:\n')
print(result.head())
'''
以order_id为行分组键,以dishes_name为列分组键创建的透视表为:amounts                          ...      counts
dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒  ... 黄尾袋鼠西拉子红葡萄酒 黄油曲奇饼干 黄花菜炒木耳 黑米恋上葡萄
order_id                                     ...
137             NaN     NaN     NaN     NaN  ...         NaN    NaN    NaN    NaN
165             NaN     NaN    80.0     NaN  ...         NaN    NaN    1.0    NaN
166             NaN     NaN     NaN     NaN  ...         NaN    NaN    NaN    NaN
171             NaN     NaN     NaN     NaN  ...         NaN    NaN    NaN    NaN
177             NaN     NaN     NaN     NaN  ...         NaN    NaN    NaN    NaN'''#values参数---默认对全部数据进行聚合
# result =pd.pivot_table(data=data,index='order_id',values='counts',aggfunc=np.sum)
result =pd.pivot_table(data=data,index='order_id',aggfunc=np.sum)
print(result.head())
'''amounts  counts
order_id
137           194       9
165           953      21
166           241       7
171           254      10
177           137       4
'''
#当有缺失值时,填充值的设置
result = pd.pivot_table(data=data,index='order_id',columns='dishes_name',aggfunc=np.sum,fill_value=0)
print('将缺失值填充为数值0',result.head())
'''
将缺失值填充为数值0             amounts                          ...      counts
dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒  ... 黄尾袋鼠西拉子红葡萄酒 黄油曲奇饼干 黄花菜炒木耳 黑米恋上葡萄
order_id                                     ...
137               0       0       0       0  ...           0      0      0      0
165               0       0      80       0  ...           0      0      1      0
166               0       0       0       0  ...           0      0      0      0
171               0       0       0       0  ...           0      0      0      0
177               0       0       0       0  ...           0      0      0      0'''
#margins参数
result = pd.pivot_table(data=data,index='order_id',columns='dishes_name',aggfunc=np.sum,fill_value=0,margins=True)
print('查看汇总数据:\n',result.head())
'''
查看汇总数据:amounts                          ... counts
dishes_name  42度海之蓝  北冰洋汽水  38度剑南春  50度古井贡酒  ... 黄油曲奇饼干 黄花菜炒木耳 黑米恋上葡萄 All
order_id                                     ...
137               0       0       0       0  ...      0      0      0   9
165               0       0      80       0  ...      0      1      0  21
166               0       0       0       0  ...      0      0      0   7
171               0       0       0       0  ...      0      0      0  10
177               0       0       0       0  ...      0      0      0   4
'''
import pandas as pd
import numpy as npdetail = pd.read_excel('meal_order_detail.xlsx')
#
#创建交叉表 (特殊透视表)
cross_table = pd.crosstab(index=detail['order_id'],columns=detail['dishes_name'],values=detail['counts'],aggfunc=np.sum)
print('以order_id行分组键、deshes_name为列分组键,得到到交叉表为:\n')
print(cross_table.head())
'''
以order_id行分组键、deshes_name为列分组键,得到到交叉表为:dishes_name   42度海之蓝   北冰洋汽水   38度剑南春   ...  黄油曲奇饼干  黄花菜炒木耳  黑米恋上葡萄
order_id                                ...
137              NaN      NaN      NaN  ...     NaN     NaN     NaN
165              NaN      NaN      1.0  ...     NaN     1.0     NaN
166              NaN      NaN      NaN  ...     NaN     NaN     NaN
171              NaN      NaN      NaN  ...     NaN     NaN     NaN
177              NaN      NaN      NaN  ...     NaN     NaN     NaN'''#
# 准备工作
detail['place_order_time'] = pd.to_datetime(detail['place_order_time'])
date = [i.date() for i in detail['place_order_time']]
print(detail.shape)#(2779, 19)
detail['date'] = date
print(detail.shape)#(2779, 20)
# F = pd.ExcelWriter('output02.xlsx')
# detail.to_excel(F)
# F.save()result =pd.crosstab(index=detail['date'],columns=detail['dishes_name'],values=detail['amounts'],aggfunc=np.sum,margins=True)
print(result.head())
'''
dishes_name   42度海之蓝   北冰洋汽水   38度剑南春   50度古井贡酒  ...  黄油曲奇饼干  黄花菜炒木耳  黑米恋上葡萄   All
date                                             ...
2016-08-01      99.0     15.0      NaN     90.0  ...    32.0     NaN    33.0  9366
2016-08-02       NaN      5.0      NaN      NaN  ...     NaN    35.0    33.0  6125
2016-08-03       NaN      NaN      NaN      NaN  ...    16.0     NaN    66.0  6890
2016-08-04       NaN      5.0     80.0      NaN  ...     NaN    35.0     NaN  7549
2016-08-05      99.0      NaN      NaN      NaN  ...     NaN    35.0    66.0  8671'''
print(type(result))#<class 'pandas.core.frame.DataFrame'>
#
# F = pd.ExcelWriter('交叉表.xlsx')
# result.to_excel(F)
# F.save()

数据分析--pandas--透视表与交叉表相关推荐

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

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

  2. Pandas数据分析15——pandas数据透视表和交叉表

    参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对数据框也可以像excel一样进行数据透视表整合之类的操作.主要是针对分类数据进行操作,还可以计算数值型 ...

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

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

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

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

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

    文章目录 pandas__任务4.5 创建透视表与交叉表 4.5 创建透视表与交叉表 代码4-67 使用订单号作为透视表索引制作透视表 代码 4-68 修改聚合函数后的透视表 代码 4-69 使用订单 ...

  6. Python数据分析 | (31) 透视表和交叉表

    目录 1. 透视表 2. 交叉表:crosstab 3. 总结 1. 透视表 透视表(pivot table)是各种电子表格程序和其他数据分析软件中一种常见的 数据汇总工具.它根据一个或多个键对数据进 ...

  7. 【Pandas分组聚合】进阶:透视表、交叉表(pivot_table() 、crosstab())

    Pandas透视表.交叉表 创建DataFrame结构 透视表 pivot_table() 单列聚合 多列聚合 交叉表 crosstab() 计算分组频率 两列分组后求第三列的统计指标 创建DataF ...

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

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

  9. 4.5 创建透视表与交叉表

    4.5 创建透视表与交叉表 4.5.1利用pivot_table函数可以实现透视表 pivot_table函数的常用参数及其说明 4.5.2 使用crosstab函数创建交叉表 crosstab函数的 ...

  10. python做数据透视表_Python--数据透视表和交叉表、数据读取

    数据 透视表 and 交叉表 先看数据是什么样的 ... #date dati = ['2019-11-01','2019-11-02','2019-11-03']*3rng=pd.to_dateti ...

最新文章

  1. 自定义 coding.net 静态网站域名
  2. docker -v 文件夹下没有数据_详细!快速入门指南!Docker
  3. Java学习优秀网站
  4. 学习Asp.net MVC相关资料
  5. c# 标准正太分布函数_数据标准化处理中的min-max和zscore
  6. arcgis批量按掩膜提取栅格
  7. 采用推理的方法认知单词、CBOW模型
  8. java反射创建实例_Java反射创建实例
  9. 微信技术总监周颢:一亿用户背后的架构秘密
  10. golang清空切片
  11. 图书管理系统【C++】
  12. java 判断正态分布_如何检验数据是否服从正态分布
  13. Linux CentOS 7网络配置基础
  14. 为什么你不能体面地做自己
  15. Excel中万能的查询函数——VLOOKUP
  16. c语言修仙亲吻片段,《C语言修仙》by一十四洲,摘抄
  17. Oracle sql 对多个sql count的值再求和
  18. Jquery图片轮播(连续滚动+突出显示)
  19. Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'dao' is exp
  20. 软件开发工具有哪些?(9.29)

热门文章

  1. nodejs 作为服务器的一些原理
  2. IPFS私有集群的安装部署
  3. 内网 子网 局域网 外网
  4. 当前服务器注册人数已满 卡丁车,跑跑卡丁车手游:预约人数达1千多万,这游戏比想象中的还要火...
  5. 【自己动手写CPU】第一条指令ori的实现
  6. 正在配置更新 请不要关闭您的计算机,Win7启动屏幕显示“正在配置Windows Update,请不要关闭”如何解决...
  7. 监控windows服务,当服务停止后自动重启服务
  8. opencv识别红绿灯
  9. 职场秘籍|年终总结写得好 升职加薪少不了
  10. 孙鑫MFC笔记(15)--多线程和聊天室的创建