2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab
#透视表 pivot table
#pd.pivot_table(data,values=None,index=None,columns=None,
import numpy as np
import pandas as pd aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='ALL')
date = ['2017-5-1','2017-5-2','2017-5-3']*3
rng = pd.to_datetime(date)
df = pd.DataFrame({'date':rng,
'key':list('abcdabcda'),
'values':np.random.rand(9)*10})
print(df)
print('-----') print(pd.pivot_table(df,values = 'values',index = ['date'],columns='key',aggfunc=np.sum))#也可以aggfunc='sum'
print('-----')
#data:DataFrame对象
#values:要聚合的列或列的列表
#index:数据透视的index,从原始数据的列中筛选
#columns:数据透视表的columns,从原始数据的列中筛选
#aggfunc:用于聚合的函数,默认为numpy,mean,支持numpy计算方法
print(pd.pivot_table(df,values = 'values',index = ['date','key'],aggfunc=len))
print('------')
#这里就分别以date,key共同做数据透视,值为values:统计不同(date,key)情况下values的计数
#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
------
#交叉表:crosstab
#默认情况下,crosstab计算因子的频率,比如用于str的数据透视分析
#pd.crosstab(index,columns,values=None,rownames=None
# ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)
df = pd.DataFrame({'A':[1,2,2,2,2],
'B':[3,3,4,4,4],
'C':[1,1,np.nan,1,1]})
print(df)
print('------')
print(pd.crosstab(df['A'],df['B']))
print('------')
#如果crosstab只接收两个series,他将提供一个频率表
#用A的唯一值,统计B唯一值的出现次数 (A,B)= (1,3)C出现了1次 (A,B)= (2,4)出现了3次 print(pd.crosstab(df['A'],df['B'],normalize=True))#以频率的方式显示
print('--------')
print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum))#values:根据因子聚合的值数组
#aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算
#这里相当于以A和B界定分组,计算出每组中第三个系列C的值
print('--------')
print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum,margins=True))
print('--------')
#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
--------
2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab的更多相关文章
- 2018.03.27 python pandas merge join 使用
#2.16 合并 merge-join import numpy as np import pandas as pd df1 = pd.DataFrame({'key1':['k0','k1','k2 ...
- 2018.03.29 python-pandas 数据读取
#数据读取# read_table,read_csv,read_excel #读取普通分隔数据:read_table #可以读取txt,csv import os import pandas as p ...
- 2018.03.29 python-matplotlib 图表生成
'''Matplotlib -> 一个python版的matlab绘图接口,以2D为主,支持python,numpy,pandas基本数据结构,高效图标库''' import numpy as ...
- 2018.03.29 python-pandas transform/apply 的使用
#一般化的groupby方法:apply df = pd.DataFrame({'data1':np.random.rand(5), 'data2':np.random.rand(5), 'key1' ...
- 2018/03/29 每日一个Linux命令 之 ping
ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面&g ...
- 数据分析处理库Pandas——数据透视表
数据 按指定的行列值显示 求和 按行求和 按列求和 数据 求平均 备注:按性别计算每个等级船票的平均价格. 备注:每个等级船舱中每种性别获救的平均值,也就是获救的比例. 备注:每种性别未成年人获救的平 ...
- 数据透视:Excel数据透视和Python数据透视
作者 | leo 早于90年代初,数据透视的概念就被提出,主要的应用场景是处理大量数据的交互式汇总查询,它实现了行或列的移动,使得行可以移到列上,列移到行上,从而根据使用者的诉求取对关注的数据子集进行 ...
- 【转载】使用Pandas创建数据透视表
使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...
- pandas 之 交叉表-透视表
import numpy as np import pandas as pd 认识 A pivot table is a data summarization tool(数据汇总工具) frequen ...
随机推荐
- Apache ab测试工具使用方法(无参、get传参、post传参)(转)
转自Apache ab测试工具使用方法(无参.get传参.post传参) Ab测试工具是apache自带的测试工具,具有简单易上手的特性,下面我总结一下我的使用方法,首先去官方下载apache程序包, ...
- java数据结构03
1.求二叉树的深度 https://www.cnblogs.com/xudong-bupt/p/4036190.html class TreeNode { char val; TreeNode lef ...
- c字符串函数
1. bcmp(3) 类ma似于strncmp(3) 但是比较结果不一定是两个字符的ascii码之差. 返回值:相等0,不相等非零(不一定是-1) 2.bcopy(3)类ma似于strncpy(3) ...
- 前端批量迁移NAS存储
在实际生产中,老的NAS存储无法扩容,需要迁移到新的存储,种种原因只能前端迁移. 系统:Linux 容量:1.5T 为了减少对生产系统的影响. 1.提前将老的存储数据备份到新的存储上: 2.正试割接存 ...
- 十三、S3C2440 裸机 — 初始化代码及MMU
13.1 NOR FLASH 搬运 把程序从 nor flash 上搬运到 SDRAM 中 程序存储在 nor flash 上,运行时将程序搬运到 SDRAM 中运行 nor flash 启动:nor ...
- 如何创建DLL,以及注入DLL
为了防止忘记,特记下 DLL的创建,在VS2017中选择dll的创建 // dllmain.cpp : Defines the entry point for the DLL application. ...
- 阿里云服务器 CentOS 7.5 64位 docker安装redis集群
网上有很多教程可以参考,但是遇到坑了...... 最后参考这个教程成功了.https://www.cnblogs.com/hbbbs/articles/10028771.html 安装docker 参 ...
- 拉链法解决hashtable冲突问题
拉链法解决冲突.拉链法解决冲突的做法是将所有的相同Hash值的key放在一个链表中,比如key3和key14在hash之后都是0,那么在数组的键为0的地方存储这两个值,形式是链表.如果不能理解我的文字 ...
- 利用aspose-words直接将Word转化为图片
之前遇到一个需求,需要在word文档中加入一些文字,并转化为图片.之前也试过几种方案,但是发现效果还不是很理想,且中间需要经过一次转化为pdf的过程,最近找到了最理想的方式,即利用aspose-wor ...
- 13. ClustrixDB 基于时间点恢复
在不太可能发生灾难的情况下,可以在特定数据库.表或整个集群上执行ClustrixDB集群的某个时间点恢复.应该非常小心地处理这一问题. 先决条件 在你可以使用时间点恢复之前,你的集群应该有几个先决条件 ...