用Python实现数据的透视表的方法
作者:moxigandashu 发布时间:2022-10-11 22:16:54
标签:Python,数据,透视表
在处理数据时,经常需要对数据分组计算均值或者计数,在Microsoft Excel中,可以通过透视表轻易实现简单的分组运算。而对于更加复杂的分组运算,Python中pandas包可以帮助我们实现。
1 数据
首先引入几个重要的包:
import pandas as pd
import numpy as np
from pandas import DataFrame,Series
通过代码构造数据集:
data=DataFrame({'key1':['a','b','c','a','c','a','b','a','c','a','b','c'],'key2':['one','two','three','two','one','one','three','one','two','three','one','two'],'num1':np.random.rand(12),'num2':np.random.randn(12)})
得到数据集如下:
data
key1 key2 num1 num2
0 a one 0.268705 0.084091
1 b two 0.876707 0.217794
2 c three 0.229999 0.574402
3 a two 0.707990 -1.444415
4 c one 0.786064 0.343244
5 a one 0.587273 1.212391
6 b three 0.927396 1.505372
7 a one 0.295271 -0.497633
8 c two 0.292721 0.098814
9 a three 0.369788 -1.157426
2 交叉表—分类计数
按照不同类进行计数统计是最常见透视功能,可以通
(1)crosstab
#函数:
crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)
crosstab的index和columns是必须要指定复制的参数:
pd.crosstab(data.key1,data.key2)
结果如下:
key2 one three two
key1
a 3 1 1
b 0 1 1
c 1 1 1
想要在边框处增加汇总项可以指定margin的值为True:
pd.crosstab(data.key1,data.key2,margins=True)
结果:
key2 one three two All
key1
a 3 1 1 5
b 1 1 1 3
c 1 1 2 4
All 5 3 4 12
(2)pivot_table
函数:
pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
使用pivot_table函数同样可以实现,运算函数默认值aggfunc='mean',指定为aggfunc='count'即可:
data.pivot_table('num1',index='key1',columns='key2',aggfunc='count')
结果相同:
key2 one three two
key1
a 3 1 1
b 1 1 1
c 1 1 2
(3)groupby
通过groupby相对来说会更加复杂,首先需要对data按照key1和key2进行聚类,然后进行count运算,再将key2的index重塑为columns:
data.groupby(['key1','key2'])['num1'].count().unstack()
结果:
key2 one three two
key1
a 3 1 1
b 1 1 1
c 1 1 2
3 其它透视表运算
(1)pivot_table
pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')
要进行何种运算,只需要指定aggfunc即可。
默认计算均值:
data.pivot_table(index='key1',columns='key2')
out:
num1 num2
key2 one three two one three two
key1
a 0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595
b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c 0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726
分类汇总呢并求和:
data.pivot_table(index='key1',columns='key2',aggfunc='sum')
结果:
num1 num2
key2 one three two one three two
key1
a 0.579996 0.705657 0.203155 -0.497246 2.398164 -1.293595
b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c 0.496993 0.033673 0.412055 -0.115093 0.024650 0.155452
也可以使用其它自定义函数:
#定义一个最大值减最小值的函数
def max_min (group):
return group.max()-group.min()
data.pivot_table(index='key1',columns='key2',aggfunc=max_min)
结果:
num1 num2
key2 one three two one three two
key1
a 0.179266 0.0 0.000 3.109405 0.0 0.000000
b 0.000000 0.0 0.000 0.000000 0.0 0.000000
c 0.000000 0.0 0.177 0.000000 0.0 1.609466
(2)通过groupby
普通的函数如mean,sum可以直接应用:
data.groupby(['key1','key2']).mean().unstack()
返回结果:
num1 num2
key2 one three two one three two
key1
a 0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595
b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c 0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726
来源:https://blog.csdn.net/moxigandashu/article/details/69486269#3-其它&#-28657;&#-30266;&#-30616;&#-28720;算


猜你喜欢
- 可以说这个功能,在我理解了前面的“贪吃蛇”之后,实在是与刚开始想象的难度差了好多,当然是这种方式有取巧之嫌,终归是实现了功能,我们来进行分析
- 牛顿法求平方根原理计算机常用循环来计算F的平方根.从某个猜测的x值开始,根据x^2与F的近似度来调整x,产生一个更好的猜测:x -= (x
- SQL Server通常都运行在多处理器的服务器上,这一点在现在尤为普遍。原因是多内核的处理器越来越普及。那么,在多处理器环境下,Windo
- 背景当 TKE 集群配置了节点池并启用了弹性伸缩,在节点资源不够时可以触发节点的自动扩容 (自动买机器并加入集群),但这个扩容流程需要一定的
- 背景在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢。这个va
- 本文实例讲述了Python实现的微信公众号群发图片与文本消息功能。分享给大家供大家参考,具体如下:在微信公众号开发中,使用api都要附加ac
- 本文实例总结了MySQL数据库优化技术的索引用法。分享给大家供大家参考,具体如下:这里紧接上一篇《MySQL数据库优化技术之配置技巧总结》,
- 导言在前面的教程里我们学习了DataList提供了一些风格样式的属性.而且我们还学习了如何定义HeadStyle, ItemStyle, A
- 对比Google Chrome、IE来说,在Windows环境下,Firefox 3.5的启动速度非常慢,据说是因为Firefox 3.5从
- Tensorflow内置了许多数据集,但是实际自己应用的时候还是需要使用自己的数据集,这里TensorFlow 官网也给介绍文档,官方文档。
- 工欲善其事必先利其器,一个好的工具能让起到事半功倍的效果,Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法,下面这几个
- <'% '************************************************
- 前言现在很多的直播平台或者视频平台都会用到弹幕加强和观众的互动效果,那么如何用JS实现这样的效果呢,用一个初学者的方法记录下这个方法,欢迎大
- Python自定义函数在Python编程中,可以使用已经定义好的函数,也可以自定义函数实现某些特殊的功能。自定义函数的语法在Python中,
- JavaScript图片水平翻转后垂直翻反转的特效一:<!--把下列代码加到body区域内--><SCRIPT langu
- 新浪天气预报代码,需要的朋友可以复制下面的代码到要显示的页面,新浪代码 :<IFRAME WIDTH='260
- Paddle模型性能分析Profiler定位性能瓶颈点优化程序提升性能Paddle Profiler是飞桨框架自带的低开销性能分析器,可以对
- Python是一种广泛使用的编程语言,特别是在数据分析、机器学习和人工智能领域。在Python中,字符串是一个非常重要的数据类型,可用来存储
- jxdawei的blog:http://www.iwcn.net/本文讨论的是在web标准普及的形势下,网站程序员的定位以及如何与设计师配合
- 一、安装pip install pymongo二、连接数据库import pymongo# 方式一client = pymongo.Mong