在处理数据时,经常需要对数据分组计算均值或者计数,在Microsoft Excel中,可以通过透视表轻易实现简单的分组运算。而对于更加复杂的分组运算,Python中pandas包可以帮助我们实现。

数据

交叉表分类计数

其它透视表运算

1 数据

首先引入几个重要的包:

import pandas as pdimport numpy as npfrom 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)})

得到数据集如下:

datakey1 key2 num1 num20 a one 0.268705 0.0840911 b two 0.876707 0.2177942 c three 0.229999 0.5744023 a two 0.707990 -1.4444154 c one 0.786064 0.3432445 a one 0.587273 1.2123916 b three 0.927396 1.5053727 a one 0.295271 -0.4976338 c two 0.292721 0.0988149 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 twokey1a 3 1 1b 0 1 1c 1 1 1

想要在边框处增加汇总项可以指定margin的值为True:

pd.crosstab(data.key1,data.key2,margins=True)

结果:

key2 one three two Allkey1a 3 1 1 5b 1 1 1 3c 1 1 2 4All 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 twokey1a 3 1 1b 1 1 1c 1 1 2

(3)groupby

通过groupby相对来说会更加复杂,首先需要对data按照key1和key2进行聚类,然后进行count运算,再将key2的index重塑为columns:

data.groupby(['key1','key2'])['num1'].count().unstack()

结果:

key2 one three twokey1a 3 1 1b 1 1 1c 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 num2key2 one three two one three twokey1a 0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530c 0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726

分类汇总呢并求和:

data.pivot_table(index='key1',columns='key2',aggfunc='sum')

结果:

num1 num2key2 one three two one three twokey1a 0.579996 0.705657 0.203155 -0.497246 2.398164 -1.293595b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530c     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 num2key2 one three two one three twokey1a 0.179266 0.0 0.000 3.109405 0.0 0.000000b 0.000000 0.0 0.000 0.000000 0.0 0.000000c 0.000000 0.0 0.177 0.000000 0.0 1.609466

(2)通过groupby

普通的函数如mean,sum可以直接应用:

data.groupby(['key1','key2']).mean().unstack()

返回结果:

num1 num2key2 one three two one three twokey1a 0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595b 0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530c 0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726

逆向透视表 python_Python实现数据的透视表相关推荐

  1. 表单及数据提交、表单的作用、服务端接收提交的数据、php处理数据流程、文件域及文件域中数据处理、php展示数据(响应)

    表单及数据提交: 表单的作用: 用于收集相关信息:html中有专门提交数据的标签,可以很容易的收集用户输入的信息,这个标签有两个重要的属性:action表单提交的地址和method以什么方式提交表单, ...

  2. mysql--创建表,插入数据,修改表名,删除表,简单查询/内连接、左/右连接

    创建表mm:  其中id为主键且自增长 create table mm(id int(10) primary key not null unique auto_increment,name varch ...

  3. Mysql复制表两种方式(复制表结构、复制表结构和数据、复制表中的部分数据、复制表中的部分数据并起别名)

    需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE - SELECT 命令,是无法实现的. 本章节将为大家介绍如何完整的复制MySQL数据表,步骤如 ...

  4. MYSQL复制表结构及数据到新表

    1.复制表结构及数据到新表 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from ...

  5. mysql创建备份表sql_sql创建备份表和复制数据到备份表

    1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable ...

  6. 按照下面的页面做一个用户注册的Sevlet,要求自己设计表,并将表单的数据写入到表中。

    按照下面的页面做一个用户注册的Sevlet,要求自己设计表,并将表单的数据写入到表中. 表单代码如下:(register.html) <!DOCTYPE html> <html la ...

  7. 管理表空间和数据文件——维护表空间——改变表空间的读写状态和改变表空间名称...

    默认情况下表空间是处于可读写状态,用户不仅可以查询表空间上的对象数据,而且可以在表空间上执行dml 和ddl 操作.如果表空间只用于存放静态数据,那么为了便于管理和备份恢复,应该将其转变为只读状态:另 ...

  8. 管理表空间和数据文件——维护表空间——设置默认表空间和删除表空间和删除数据文件盒临时文件...

    1.设置数据库默认表空间 当建立数据库时,使用default tablespace 选项可以设置数据库的默认表空间.在建立了数据库之后,使用alter database default tablesp ...

  9. 管理表空间和数据文件——建立表空间——建立字典管理表空间和建立加密表空间...

    字典管理表空间是为了与早期版本兼容而保留的空间管理特性.当使用字典管理方式时,区数据字典进行管理. 注意:如果建立字典管理表空间,那么要求system表空间必须采用字典管理方式,并且建立时,需要指定e ...

最新文章

  1. 用python创建一个目录
  2. Spring Cloud微服务实战:手把手带你整合eurekazuulfeignhystrix
  3. 关于C#调用API的理解(汇多考勤机HD4K)
  4. 【c】‘声明’和malloc不要重复开辟空间
  5. mydate97设置时间
  6. udp文件服务器,UDP客户端服务器文件传输
  7. 江苏大学c语言程序设计,江苏大学201级C语言课程设计要求及题目.doc
  8. java怎么写自定义布局_java-Android设置自定义首选项布局
  9. ssh免密码登陆远程服务器(3种方式)
  10. 使用avalon2 去构建一个 app-route
  11. 面向对象程序设计——基于JML的地铁系统
  12. USB总线-Linux内核USB3.0设备控制器驱动框架分析(四)
  13. Android 动画之 View动画 和 帧动画
  14. 海贝音频384khz_海贝音乐app下载-海贝音乐最新版下载v4.0.1-IT168下载站
  15. Hibernate学习文章
  16. 欧姆龙NX1P2编程学习(1)-编写功能块注意事项
  17. 红海厮杀的超融合 泽塔云竟用GPU云开辟一片蓝海
  18. java -p_javap的作用是什么?
  19. 转《魏炜的举世无双大博客》
  20. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/practi

热门文章

  1. 数据库 查询XML XQuery
  2. javascript读取用户名和计算机名
  3. 如何优雅地本地化构建Mybatis源码
  4. C语言---快速排序
  5. MATLAB程序详细解析,遗传算法——matlab代码解析
  6. centos6.5卸载和安装mysql_Linux CentOS 6.5 卸载、tar安装MySQL的教程
  7. matlab中上下光标的作用,当鼠标移动到按钮上时改变光标形状
  8. 分布式系统监视zabbix讲解十之监控tomcat--技术流ken
  9. python 迭代器相关知识
  10. 2.4. myisamchk — MyISAM Table-Maintenance Utility