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 ...
随机推荐
- Linux目录的切换
pwd:显示当前所在目录 ~:root目录 /:根目录 ls:查看当前目录下所有的文件和目录 cd usr 切换到该目录下usr目录 cd ../ 切换到上一层目录 cd / 切换到系统根目录 cd ...
- 常用命令之------ln
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的 ...
- SugarCRM开发入门
SugarCRM官网下载地址:https://sourceforge.net/projects/sugarcrm/ 概述 Sugar最初是基于LAMP(Linux.Apache.MySQL和PHP)运 ...
- 基于python的知乎开源爬虫 zhihu
今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下.发现果然很好用啊.就 ...
- 解决input 中placeholder的那些神坑
**昨天后台小哥哥提到placehold无法显示问题,我这边总结一下,顺便写个小文章分享给大家..** ============================================== 一 ...
- NOIP2016提高A组模拟9.17总结
第一题,典型的隔板问题, 但是我忘记隔板问题怎么打,一开始在花了1小时,还是没想出来,果断弃疗, 最后的40分钟,我打完了第二题,接着又用了20分钟推敲出一种极其猥琐的式子来代替,可惜预处理的阶乘忘记 ...
- Comet OJ - Contest #12 D
题目描述 求(x,y)的对数满足x∈[0,a],y∈[0,b],x⊕y=0且|x-y|<=m 题解 一种比较sb的做法是考虑x-y的借位,根据借位以及差值进行转移 还有一种比较正常的做法,假设一 ...
- js 获取select的值
var t = document.getElementById("provid"); console.log(t.value); console.log(t.text); //未定 ...
- jquery扩展方法(表单数据格式化为json对象)
1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...
- ASP.NET实现文件断点续传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...