#透视表 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
--------

最新文章

  1. C# winform 模拟键盘鼠标操作
  2. 手打的笔记,java语法中的输入输出,语句,及注释。
  3. android快速开发框架
  4. 20141030--SQL2008常用命令-1
  5. HDU4276 The Ghost Blows Light SPFA&&树dp
  6. (转) xcodebuild和xcrun自动化编译ipa包 笔记
  7. EAT/IAT Hook
  8. [转]C++学习心得
  9. uva 10817 Headmaster's Headache 出发dp 位计算
  10. Jqury笔记
  11. 【NET】Winform分页控件初探
  12. 常用的css
  13. immutable.js 更新数组(mergeDeepWith)
  14. linux小白成长之路8————访问Docker中的mysql
  15. java新知识系列 三
  16. 【UOJ386】【UNR #3】鸽子固定器 链表
  17. nginx屏蔽某段IP、某个国家的IP
  18. CSS文本超出指定行数省略显示
  19. 第3章 Git使用人门
  20. C#后台代码获取程序集资源文件

热门文章

  1. linux如何配置使用sendEmail发送邮件
  2. html-DOM了解
  3. python2 'ascii'编码问题
  4. Linux日常之命令uniq
  5. TensorRt安装
  6. python基础语法170题
  7. C++与C#对于引用外部文件成员使用的区别
  8. vue history模式下的微信分享
  9. python接口自动化四(json数据处理)
  10. 获取树莓派ip地址的方法