#透视表 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的更多相关文章

  1. 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 ...

  2. 2018.03.29 python-pandas 数据读取

    #数据读取# read_table,read_csv,read_excel #读取普通分隔数据:read_table #可以读取txt,csv import os import pandas as p ...

  3. 2018.03.29 python-matplotlib 图表生成

    '''Matplotlib -> 一个python版的matlab绘图接口,以2D为主,支持python,numpy,pandas基本数据结构,高效图标库''' import numpy as ...

  4. 2018.03.29 python-pandas transform/apply 的使用

    #一般化的groupby方法:apply df = pd.DataFrame({'data1':np.random.rand(5), 'data2':np.random.rand(5), 'key1' ...

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

    ping 用于测试两及其网络是否通 主要用于检测网络是否通畅. -- 具体语法 ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面&g ...

  6. 数据分析处理库Pandas——数据透视表

    数据 按指定的行列值显示 求和 按行求和 按列求和 数据 求平均 备注:按性别计算每个等级船票的平均价格. 备注:每个等级船舱中每种性别获救的平均值,也就是获救的比例. 备注:每种性别未成年人获救的平 ...

  7. 数据透视:Excel数据透视和Python数据透视

    作者 | leo 早于90年代初,数据透视的概念就被提出,主要的应用场景是处理大量数据的交互式汇总查询,它实现了行或列的移动,使得行可以移到列上,列移到行上,从而根据使用者的诉求取对关注的数据子集进行 ...

  8. 【转载】使用Pandas创建数据透视表

    使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...

  9. pandas 之 交叉表-透视表

    import numpy as np import pandas as pd 认识 A pivot table is a data summarization tool(数据汇总工具) frequen ...

随机推荐

  1. Linux目录的切换

    pwd:显示当前所在目录 ~:root目录 /:根目录 ls:查看当前目录下所有的文件和目录 cd usr 切换到该目录下usr目录 cd ../ 切换到上一层目录 cd / 切换到系统根目录 cd  ...

  2. 常用命令之------ln

    当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的 ...

  3. SugarCRM开发入门

    SugarCRM官网下载地址:https://sourceforge.net/projects/sugarcrm/ 概述 Sugar最初是基于LAMP(Linux.Apache.MySQL和PHP)运 ...

  4. 基于python的知乎开源爬虫 zhihu

    今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下.发现果然很好用啊.就 ...

  5. 解决input 中placeholder的那些神坑

    **昨天后台小哥哥提到placehold无法显示问题,我这边总结一下,顺便写个小文章分享给大家..** ============================================== 一 ...

  6. NOIP2016提高A组模拟9.17总结

    第一题,典型的隔板问题, 但是我忘记隔板问题怎么打,一开始在花了1小时,还是没想出来,果断弃疗, 最后的40分钟,我打完了第二题,接着又用了20分钟推敲出一种极其猥琐的式子来代替,可惜预处理的阶乘忘记 ...

  7. Comet OJ - Contest #12 D

    题目描述 求(x,y)的对数满足x∈[0,a],y∈[0,b],x⊕y=0且|x-y|<=m 题解 一种比较sb的做法是考虑x-y的借位,根据借位以及差值进行转移 还有一种比较正常的做法,假设一 ...

  8. js 获取select的值

    var t = document.getElementById("provid"); console.log(t.value); console.log(t.text); //未定 ...

  9. jquery扩展方法(表单数据格式化为json对象)

    1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...

  10. ASP.NET实现文件断点续传

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...