2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab

 1 #透视表 pivot table
 2 #pd.pivot_table(data,values=None,index=None,columns=None,
 3 import numpy as np
 4 import pandas as pd              aggfunc=‘mean‘,fill_value=None,margins=False,dropna=True,margins_name=‘ALL‘)
 5 date = [‘2017-5-1‘,‘2017-5-2‘,‘2017-5-3‘]*3
 6 rng = pd.to_datetime(date)
 7 df = pd.DataFrame({‘date‘:rng,
 8                    ‘key‘:list(‘abcdabcda‘),
 9                    ‘values‘:np.random.rand(9)*10})
10 print(df)
11 print(‘-----‘)
12
13 print(pd.pivot_table(df,values = ‘values‘,index = [‘date‘],columns=‘key‘,aggfunc=np.sum))#也可以aggfunc=‘sum‘
14 print(‘-----‘)
15 #data:DataFrame对象
16 #values:要聚合的列或列的列表
17 #index:数据透视的index,从原始数据的列中筛选
18 #columns:数据透视表的columns,从原始数据的列中筛选
19 #aggfunc:用于聚合的函数,默认为numpy,mean,支持numpy计算方法
20 print(pd.pivot_table(df,values = ‘values‘,index = [‘date‘,‘key‘],aggfunc=len))
21 print(‘------‘)
22 #这里就分别以date,key共同做数据透视,值为values:统计不同(date,key)情况下values的计数
23 #aggfunc=len(或者count):计数

结果:
        date key    values
0 2017-05-01   a  2.562157
1 2017-05-02   b  9.604823
2 2017-05-03   c  4.770968
3 2017-05-01   d  0.654878
4 2017-05-02   a  8.839281
5 2017-05-03   b  1.211138
6 2017-05-01   c  9.570886
7 2017-05-02   d  9.915021
8 2017-05-03   a  8.551166
-----
key                a         b         c         d
date                                             
2017-05-01  2.562157       NaN  9.570886  0.654878
2017-05-02  8.839281  9.604823       NaN  9.915021
2017-05-03  8.551166  1.211138  4.770968       NaN
-----
                values
date       key       
2017-05-01 a       1.0
             c       1.0
             d       1.0
2017-05-02 a       1.0
             b       1.0
             d       1.0
2017-05-03 a       1.0
             b       1.0
             c       1.0
------

 1 #交叉表:crosstab
 2 #默认情况下,crosstab计算因子的频率,比如用于str的数据透视分析
 3 #pd.crosstab(index,columns,values=None,rownames=None
 4 #            ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)
 5 df = pd.DataFrame({‘A‘:[1,2,2,2,2],
 6                    ‘B‘:[3,3,4,4,4],
 7                    ‘C‘:[1,1,np.nan,1,1]})
 8 print(df)
 9 print(‘------‘)
10 print(pd.crosstab(df[‘A‘],df[‘B‘]))
11 print(‘------‘)
12 #如果crosstab只接收两个series,他将提供一个频率表
13 #用A的唯一值,统计B唯一值的出现次数  (A,B)= (1,3)C出现了1次   (A,B)= (2,4)出现了3次
14
15 print(pd.crosstab(df[‘A‘],df[‘B‘],normalize=True))#以频率的方式显示
16 print(‘--------‘)
17 print(pd.crosstab(df[‘A‘],df[‘B‘],values=df[‘C‘],aggfunc=np.sum))#values:根据因子聚合的值数组
18 #aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算
19 #这里相当于以A和B界定分组,计算出每组中第三个系列C的值
20 print(‘--------‘)
21 print(pd.crosstab(df[‘A‘],df[‘B‘],values=df[‘C‘],aggfunc=np.sum,margins=True))
22 print(‘--------‘)
23 #margins:布尔值,默认值False,添加行/列边距(小计)

结果:
   A  B    C
0  1  3  1.0
1  2  3  1.0
2  2  4  NaN
3  2  4  1.0
4  2  4  1.0
------
B  3  4
A     
1  1  0
2  1  3
------
B    3    4
A         
1  0.2  0.0
2  0.2  0.6
--------
B    3    4
A         
1  1.0  NaN
2  1.0  2.0
--------
B      3    4  All
A                
1    1.0  NaN  1.0
2    1.0  2.0  3.0
All  2.0  2.0  4.0
--------

原文地址:https://www.cnblogs.com/jxzhu/p/8669310.html

时间: 2024-10-11 18:06:17

2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab的相关文章

Pandas:透视表(pivotTab)和交叉表(crossTab)

import numpy as np import pandas as pd from pandas import Series,DataFrame 一.透视表(pivotTab) 透视表就是将指定原有DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数(默认情况下式mean函数). df = DataFrame({'类别':['水果','水果','水果','蔬菜','蔬菜','肉类','肉类'], '产地':['美国','中国','中国','中国','新西兰','新西兰',

Python pandas 数据框的str列内置的方法详解

原文链接:http://www.datastudy.cc/to/31 在使用pandas框架的DataFrame的过程中,如果需要处理一些字符串的特性,例如判断某列是否包含一些关键字,某列的字符长度是否小于3等等这种需求,如果掌握str列内置的方法,处理起来会方便很多. 下面我们来详细了解一下,Series类的str自带的方法有哪些. 1.cat() 拼接字符串 例子: >>> Series(['a', 'b', 'c']).str.cat(['A', 'B', 'C'], sep=',

2018/03/29 每日一个Linux命令 之 ping

ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址] -- 1: 是否与主机联通 ping baidu.com //需要手动终止Ctrl+C 2:指定接收包的次数 ping -c 2 baid.com /

SQL: PIVOT 数据透视 行列转换

-- 数据透视 -- PIVOT: 行转列 SELECT * FROM (     SELECT N'张三' AS 姓名, N'语文' AS 课程,70 AS 分数 UNION     SELECT N'张三' AS 姓名, N'数学' AS 课程,90 AS 分数 UNION     SELECT N'李四' AS 姓名, N'语文' AS 课程,85 AS 分数 UNION     SELECT N'李四' AS 姓名, N'数学' AS 课程,85 AS 分数 ) AS A PIVOT (

Excel数据分类汇总与数据透视表

苏轼的<题西林壁>:横看成岭侧成峰,远近高低各不同.给我们讲述着一个道理:同样的事物与内容,从不同角度观察会得到意想不到的结果.同样,Excel不单单只是一个数据的记录工具,也不单单是一个表格的制作工具,学会怎么从一行一行单调的数据去挖掘出我们想要的信息也是它的一个强项.我们不应小看Excel的挖掘功能,使用好挖掘功能会让我们得到意想不到的效果,将是我们工作中分析问题的一大助力. 下面介绍两种常用的数据分析.挖掘工具:数据分类汇总与数据透视表.要使用的示例数据如下: 呵呵-有点偷懒,还是使用上

Python学习之路—2018/6/29

Python学习之路-2018/6/29 1.跨表查询 跨表查询: 基于对象查询 基于双下划线查询 聚合和分组查询 F与Q查询 F查询 过滤器只能讲字段值与常量进行比较,如果需要用到与字段值进行比较则需要用到F查询,F查询还支持与常量之间的加减乘除的运算.数据: # 查询评论数大于阅读数的书籍 >>> Book.objects.filter(comment_count__gt=F("read_count")) <QuerySet [<Book: 斗破苍穹&

如何使用 Python 对 Excel 做一份数据透视表

如何使用 Python 对 Excel 做一份数据透视表客户这边,其中有一张如同上图所示的数据汇总表,然而需求是,需要将这张表数据做一个数据透视表,最后通过数据透视表中的数据,填写至系统数据库.拿到需求,首先就想到肯定不能直接用设计器去操作 Excel,通过操作 Excel 去做数据透视表,那样,就得通过代码去完成了. 代码分享如下: import pandas as pdimport numpy as np def prvot():f = pd.read_excel(io='C:/file/t

通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create table s( [name] nvarchar(50), book nvarchar(50), saledNumber int ) ----插入测试数据 insert into s ([name],book,saledNumber) values('小王','java从入门到精通',10); inser

pandas小记:pandas数据规整化

http://blog.csdn.net/pipisorry/article/details/39506169 数据分析和建模方面的大量编程工作都是用在数据准备上的:加载.清理.转换以及重 塑.有时候,存放在文件或数据库中的数据并不能满足数据处理应用的要求. pandas和Python标准库提供了一组高级的.灵活的.高效的核心函数和算法,它们能够轻松地将数据规整化为正确的形式. 数据正则化data normalization pandas.dataframe每行都减去行平均值 use DataF