2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab

Posted SAP Tab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab相关的知识,希望对你有一定的参考价值。

 1 #透视表 pivot table
 2 #pd.pivot_table(data,values=None,index=None,columns=None,
 3 import numpy as np
 4 import pandas as pd              aggfunc=mean,fill_value=None,margins=False,dropna=True,margins_name=ALL)
 5 date = [2017-5-1,2017-5-2,2017-5-3]*3
 6 rng = pd.to_datetime(date)
 7 df = pd.DataFrame({date:rng,
 8                    key:list(abcdabcda),
 9                    values:np.random.rand(9)*10})
10 print(df)
11 print(-----)
12 
13 print(pd.pivot_table(df,values = values,index = [date],columns=key,aggfunc=np.sum))#也可以aggfunc=‘sum‘
14 print(-----)
15 #data:DataFrame对象
16 #values:要聚合的列或列的列表
17 #index:数据透视的index,从原始数据的列中筛选
18 #columns:数据透视表的columns,从原始数据的列中筛选
19 #aggfunc:用于聚合的函数,默认为numpy,mean,支持numpy计算方法
20 print(pd.pivot_table(df,values = values,index = [date,key],aggfunc=len))
21 print(------)
22 #这里就分别以date,key共同做数据透视,值为values:统计不同(date,key)情况下values的计数
23 #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
------

 1 #交叉表:crosstab
 2 #默认情况下,crosstab计算因子的频率,比如用于str的数据透视分析
 3 #pd.crosstab(index,columns,values=None,rownames=None
 4 #            ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)
 5 df = pd.DataFrame({A:[1,2,2,2,2],
 6                    B:[3,3,4,4,4],
 7                    C:[1,1,np.nan,1,1]})
 8 print(df)
 9 print(------)
10 print(pd.crosstab(df[A],df[B]))
11 print(------)
12 #如果crosstab只接收两个series,他将提供一个频率表
13 #用A的唯一值,统计B唯一值的出现次数  (A,B)= (1,3)C出现了1次   (A,B)= (2,4)出现了3次
14 
15 print(pd.crosstab(df[A],df[B],normalize=True))#以频率的方式显示
16 print(--------)
17 print(pd.crosstab(df[A],df[B],values=df[C],aggfunc=np.sum))#values:根据因子聚合的值数组
18 #aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算
19 #这里相当于以A和B界定分组,计算出每组中第三个系列C的值
20 print(--------)
21 print(pd.crosstab(df[A],df[B],values=df[C],aggfunc=np.sum,margins=True))
22 print(--------)
23 #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的主要内容,如果未能解决你的问题,请参考以下文章

python-pandas

仅在特定条件下将 NaN 替换为“-”符号,Python-Pandas

python-pandas

python-pandas-1

python-pandas

有没有办法只使用 python-pandas 创建多轴图? [复制]