利用excel与Pandas完成实现数据透视表
数据透视表是一种分类汇总数据的方法。本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作。
1,制作数据透视表
制作数据透视表的时候,要确定这几个部分:行字段、列字段、数据区,汇总函数。数据透视表的结构如图1所示。
图1 数据透视表的结构
Excel制作数据透视表很简单,选中表格数据,并点击工具栏上的“数据透视表”菜单即可,如图2所示。
Pandas里制作数据透视表主要使用pivot_table方法。pivot_table方法的调用形式如下:
DataFrame.pivot(index, columns, values, aggfunc)
其实index参数对应行字段,columns参数对应列字段,values参数对应数据区。aggfunc的默认值是numpy.mean,也就是计算平均值。
下面结合实例讲解pivot_table的用法,首先用以下代码导入示例数据:
import pandas as pd
import xlwings as xwpath = "D:/chapter11/数据透视表.xlsx"
wb = xw.Book(path)
sheet = wb.sheets[0]
df = sheet.range("A1:E7").options(pd.DataFrame, index=False, header=True).value
用pivot_table方法制作数据透视表,商品作为行字段,品牌作为列字段,销售额放在数据区,这样设置:
pt1 = df.pivot_table(index='商品', columns='品牌', values='销售额')
sheet.range("G1").options(index=True, header=True).value = pt1
结果如图3所示。这个表格计算的是销售额的平均值。
图3 商品销售数据透视表
上面的代码修改一下,把数量放在数据区,设置汇总函数是sum:
pt2 = df.pivot_table(index='商品', columns='品牌', values='数量' , aggfunc='sum')
sheet.range("G8").options(index=True, header=True).value = pt2
结果如图4所示。这个表格计算的是销售数量的和。
图4 商品销售数据透视表
可以看到这两个数据透视表是有缺失值的,pivot_table有一个参数fill_value,就是用来填充这些缺失值的,例如:
df.pivot_table(index='商品', columns='品牌', values='数量', fill_value=0)
pivot_table方法还支持对透视表进行统计计算,而且会新建一个列来存放计算结果。这个统计需要用到以下两个参数:
- q margins,设定是否添加汇总列,一般设置为True。
- q margins_name,汇总列的名称。
示例代码如下:
pt3 = df.pivot_table(index='商品', columns='品牌', values='销售额', fill_value=0, aggfunc='sum', margins=True, margins_name="汇总")
sheet.range("L1").options(index=True, header=True).value = pt3
计算结果如图5所示。
图5 数据透视表汇总计算
参数index和values都可以是列表类型,例如:
pt4 = df.pivot_table(index=['品牌', '商品'], values=['销售额', '利润'], aggfunc='sum')
sheet.range("L8").options(index=True, header=True).value = pt4
统计结果如图6所示。
这个数据透视表可以对利润和销售额进行不同的汇总计算,这时候aggfunc是字典类型,例如对销售额计算平均值,对利润计算总和,可以这样:
pt5 = df.pivot_table(index=['品牌', '商品'], values=['销售额', '利润'], aggfunc={'销售额':'mean', '利润':'sum'})
sheet.range("L15").options(index=True, header=True).value = pt5
统计结果如图7所示。
统计结果如图7所示。
对于同一个指标可以设定多个汇总函数,例如:
pt6 = df.pivot_table(index=['品牌', '商品'], values=['销售额', '利润'], aggfunc={'销售额':['mean', 'sum'], '利润':['mean', 'sum']})
sheet.range("L22").options(index=True, header=True).value = pt6
统计结果如图8所示。
图8 统计结果
2,筛选数据透视表中的数据
pivot_table的运算结果是一个DataFrame类型,所以可以用DataFrame截取数据的方法筛选数据透视表中的数据。本节用于示例的数据透视表如下:
pt = df.pivot_table(index='商品', columns='品牌', values='销售额', fill_value=0, aggfunc='sum', margins=True, margins_name="汇总")
在jupyter中输出pt如图9所示。
图9 输出变量pt
下面给出几个筛选数据的例子,这些例子的结果都可以通过Range对象的options方法转换成Excel表格数据。
(1)仅保留汇总列的数据。
pt['汇总']
结果是一个Series,如下所示。
商品
洗衣机 24000.0
电风扇 62000.0
空调 81000.0
汇总 167000.0
Name: 汇总, dtype: float64
要提取洗衣机的汇总数据,可以用以下表达式:
pt['汇总']['洗衣机']
(2)获取品牌A、B、C的汇总数据。
pt[['A', 'B', 'C']]
结果如图10所示。
图10 获取品牌A、B、C的汇总数据
(3)仅保留商品洗衣机的汇总数据。
pt.loc['洗衣机']
结果如下所示。
品牌
A 11000.0
B 0.0
C 13000.0
汇总 24000.0
Name: 洗衣机, dtype: float64
(4)仅保留商品洗衣机和电风扇的汇总数据。
pt.loc[['洗衣机', '电风扇']]
结果如图11所示。
图11 仅保留结果的某些行
(5)仅保留汇总数据某些行和列。
pt[['A', 'B', 'C']].loc[['洗衣机', '电风扇']]
输出结果如图12所示。
图12 仅保留汇总数据某些行和列
3,使用字段列表排列数据透视表中的数据
数据透视表是一个DataFrame,所以可以用sort_values方法来按某列排序,示例代码如下:
pt = df.pivot_table(index='商品', columns='品牌', values='销售额', fill_value=0, aggfunc='sum', margins=True, margins_name="汇总")
pt.sort_values(by="汇总")
结果如图13所示。
图13 按汇总列升序排列
4,对数据透视表中的数据进行分组
在Excel中还支持对数据透视表中的数据进行分组,例如可以把风扇和空调的数据分为一组来计算,如图14所示。
图14 对数据透视表中的数据进行分组
用Pandas也可以实现类似的统计,示例代码如下:
代码11-9 对数据透视表中的数据进行分组统计
import pandas as pd
import xlwings as xwpath = "D:/chapter11/数据透视表.xlsx"
wb = xw.Book(path)pt = df.pivot_table(index='商品', values='销售额', fill_value=0, aggfunc='sum', margins=True, margins_name="总计")
pt.loc['分组1'] = pt.loc['电风扇'] + pt.loc['空调']
pt.loc['分组2'] = pt.loc['洗衣机']
# reindex方法重新排列表格
grouppt = pt.reindex(['分组1', '电风扇', '空调', '分组2', '洗衣机', '总计'])
sheet.range("A9").options(index=True, header=True).value = grouppt
输出结果如图15所示。
代码中最关键的部分就是用loc属性读取数据透视表的行数据并进行相加运算得出分组统计结果。
最后
作为一个IT的过来人,我自己整理了一些python学习资料,希望对你们有帮助。
有问题可以扫描下面二维码——>添加csdn官方认证二维码探讨
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、精品Python学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。
利用excel与Pandas完成实现数据透视表相关推荐
- 利用excel与Pandas完成实现数据透视表(文末赠书)
文末赠书 数据透视表是一种分类汇总数据的方法.本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作. 1,制作数据透视表 制作数据透视表的时候,要确定这几个部分:行字段.列字段.数 ...
- 职称计算机excel2015年,【2015年职称计算机Excel重点精讲:创建数据透视表】- 环球网校...
[摘要]2015年职称计算机Excel重点精讲:创建数据透视表 利用Excel提供的数据透视表向导,可以很方便地建立数据透视表.以图8-1所示的年终津 贴分配表为例,要求统计各部门的津贴总和以及各部门 ...
- Python的前奏:excel常用功能简介,数据透视表,切片器
大家好,我是天空之城,今天给大家带来excel常用功能简介,数据透视表,切片器.excel是数据分析的神器,掌握了excel就等于数据分析入了门.就跟ppt一样,入门易,精通难,我们就是要向难而行,变 ...
- Python数据分析小技巧:如何在Pandas中实现数据透视表?
Python数据分析小技巧:如何在Pandas中实现数据透视表? 数据透视表是数据分析中非常有用的工具,可以帮助我们快速了解数据的结构.关联和趋势.在Pandas中,我们可以使用pivot_table ...
- 【Python基础】在pandas中使用数据透视表
文章来源于Python大数据分析,作者朱卫军 什么是透视表? 经常做报表的小伙伴对数据透视表应该不陌生,在excel中利用透视表可以快速地进行分类汇总,自由组合字段聚合计算,而这些只需要拖拉拽就能实现 ...
- 计算机表格中如何计算数据透视表,[Excel]这才是在数据透视表中进行计算的正确操作!...
"成功生成一张数据透视表,有得时候只是数据处理的开始.当你想对数据透视表中数据进行计算时,你是否有曾疑惑过,为什么填充柄变得无效了? 案例 如果需要对数据透视表中的B列.C列进行计算,并在J ...
- excel中使用Vlookup和数据透视表
虽然不经常用excel做数据筛选操作,但是偶尔还是会有这种需求,每次来都是去科普,没往心里记,这次索性做个记录,以后有什么excel计算的场景直接看自己的案例更清晰. 两个sheet页筛选 例如有ex ...
- 【数据分析与可视化】Pandas可视化与数据透视表的讲解及实战(超详细 附源码)
需要源码请点赞关注收藏后评论区留言私信~~~ 一.数据透视表 数据透视表(Pivot Table)是数据分析中常见的工具之一,根据一个或多个键值对数据进行聚合,根据列或行的分组键将数据划分到各个区域 ...
- Excel 多条件筛选 与 数据透视表 实现
文章目录 1.多条件筛选数据 2.数据透视表 pivor table 博客测试数据下载链接:https://pan.baidu.com/s/1v47lYXmgvjoBCPOwJ6T1hg 提取码:97 ...
最新文章
- FluentNhibernate 的数据库连接的配置
- android源码下载与编译,Android源码下载并编译
- nit计算机应用基础是考试大纲,NIT考试大纲--计算机应用基础.doc
- Python 数据全部显示,去掉中间省略号(pandas、...)
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
- HDU-单词的前缀 字典树
- java中eq、ne、gt、lt、ge、le分别代表含义
- 转载--认识迅雷界面引擎
- MapGis二次开发环境部署
- 逻辑为基、数企赋能(NO.7)—非逻辑思维
- 2020最新最稳微信公众号爬虫
- 【数学建模】——1992~2019国赛优秀论文
- 如何用ffmpeg合并音频和视频?
- 为什么你招不到合适的猎头顾问?浅谈猎企内部招聘
- C/C++后台开发基础知识
- 北京一所211大学计算机考研从一门改三门!北京化工大学改考
- bzoj3047: Freda的传呼机bzoj2125: 最短路
- 一文教你如何使用Mybatis Plugin 以及Druid Filer 改写SQL
- 基于 FCCA 的多特征融合的检索方法
- JavaScript 10进制转换为类似‘0x00d5’格式的16进制
热门文章
- 一个函数是周期函数,那么一定有最小正周期吗?不一定
- java 自定义xsd_spring自定义标签之 规范定义XSD
- 初次接触高德地图生成key,小心掉坑
- ros里Catkin的CMakelists/package.xml
- 大厂P6职级提升攻略
- 各种拨号接入方式简单总结
- 记录--有关CSS盒模型之内边距、边框、外边距的十九问题
- 【maven】maven-release-plugin 使用 (git)
- python commands.getoutput_Python3中用什么替换commands模块的getstatusoutput()
- html5密码隐藏,Bootstrap实现用户输入密码显示隐藏代码