#透视表 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. laravel5.8 Auth::guide

    // 使用下面这个命令Laravel会自动为我们生成Auth路由和认证模块.跟着代码往下解读. php artisan make:auth // Http/Controllers/Auth/Login ...

  2. PAT Basic 1043 输出PATest (20 分)

    给定一个长度不超过 ​ ​​ 的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符.当然,六种字符的个数不一定是一样多的,若某种字符 ...

  3. List&LinQ

    DataTable会将整个数据表接收过来,可真正使用的数据未必是整个数据表所有的数据. 使用List可以接收需要使用的数据 public class Data_Model { public strin ...

  4. U盘安装linux(CentOS Kali ubuntu)无法挂载_实测

    最新的Kali linux官方下载地址: https://www.kali.org/downloads/ 刻录软件官网:http://rufus.ie/ 1.打开. 2.插入U盘. 3.自动下载插件. ...

  5. JAVA笔记15-线程同步

    一.概念 1.多个线程之间访问同一资源,进行协调的过程是线程同步.例如两个人同时操作同一银行账户.解决方法:加锁 2.Java种引入对象互斥锁的概念,保证共享数据操作的完整性.每个对象都对应于一个可称 ...

  6. 容器————map

    序列容器是管理数据的宝贵工具,但对大多数应用程序而言,序列容器不提供方便的数据访问机制.一种典型的方法是通过名称来寻找地址.如果记录保存在序列容器中,就只能通过搜索得到这些数据.相比而言,map 容器 ...

  7. (C#- 多线程) 在线程中创建object,共享问题。

    研究如下问题: 1. 在一个进程的主线程中创建一个Object,其他线程都可以访问这个Object,并操作Object的方法. - 多线程同步问题. 2. 在一个进程的多个线程里面,每个线程都创建同一 ...

  8. centos7 修改ali yum源

    centos7 修改yum源为阿里源,某下网络下速度比较快 首先是到yum源设置文件夹里 安装base reop源 cd /etc/yum.repos.d 接着备份旧的配置文件 sudo mv Cen ...

  9. python数据类型之可hash,不可hash

    可变类型的数据不可哈希,如list,字典:同值不同址,不同值同址   列表,字典可变, 数值.字母.字符串.数字.元组不可变:同值同址,不同值不同址 怎么判断可变不可变 ?   总结:改个值 看id是 ...

  10. Mysql锁表问题解决过程

    开发中难免会遇到数据库操作锁表问题,这里说下解决过程,算是记录了. show OPEN TABLES where In_use > 0; 查看哪些表被锁了 show processlist 查看 ...