• python pandas 交叉表, 透视表


    透视表 pivot table

    透视表(pivot table)是常见的数据汇总工具,它根据一个或多个键对数据进行聚合,根据行和列上的分组键将数据分配到矩形区域中。
    pandas中使用pivot_table方法创建透视表,
    pd.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean'
    ,fill_value=None,margins=False,dropna=True,margins_name='ALL')
     
        data:DataFrame对象
        values:要聚合的列或列的列表
        index:数据透视的index,从原始数据的列中筛选
        columns:数据透视表的columns,从原始数据的列中筛选
        aggfunc:用于聚合的函数,默认为numpy,mean,支持numpy计算方法
        
        ------------原数据------------
            date key    values
    0 2019-01-01   a  6.372699
    1 2019-01-02   b  0.649605
    2 2019-01-03   c  4.897285
    3 2019-01-01   d  7.758373
    4 2019-01-02   a  1.576888
    5 2019-01-03   b  8.217029
    6 2019-01-01   c  5.454403
    7 2019-01-02   a  5.072132
    8 2019-01-03   b  2.875602
    ------------透视表1------------

    print(pd.pivot_table(df,values = 'values',index = ['date'],columns='key',aggfunc=np.sum))
    key                a          b         c         d
    date                                               
    2019-01-01  6.372699        NaN  5.454403  7.758373
    2019-01-02  6.649020   0.649605       NaN       NaN
    2019-01-03       NaN  11.092630  4.897285       NaN
    ------------透视表2------------

    #分别以date,key共同做数据透视,值为values:统计不同(date,key)情况下values的计数

    #aggfunc=len(或者count):计数

    print(pd.pivot_table(df,values = 'values',index = ['date','key'],aggfunc=len))
                    values
    date       key        
    2019-01-01 a       1.0
               c       1.0
               d       1.0
    2019-01-02 a       2.0
               b       1.0
    2019-01-03 b       2.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)



    ------------原数据------------
        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
    ------------交叉表1------------

    print(pd.crosstab(df['A'],df['B']))
    B  3  4
    A      
    1  1  0
    2  1  3
    ------------交叉表2------------

    print(pd.crosstab(df['A'],df['B'],normalize=True))#以频率的方式显示
    B    3    4
    A          
    1  0.2  0.0
    2  0.2  0.6
    ------------交叉表3------------

    print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum))

    #values:根据因子聚合的值数组

    #aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算

    #这里相当于以A和B界定分组,计算出每组中第三个系列C的值
    B    3    4
    A          
    1  1.0  NaN
    2  1.0  2.0
    ------------交叉表4------------

    print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum,margins=True))

    #margins:布尔值,默认值False,添加行/列边距(小计)
    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


    REF

    https://blog.csdn.net/pythoncsdn111/article/details/98240358

  • 相关阅读:
    [LeetCode] 85. 最大矩形
    [LeetCode] 84. 柱状图中最大的矩形
    [LeetCode] 83. 删除排序链表中的重复元素
    [LeetCode] 81. 搜索旋转排序数组 II
    [LeetCode] 82. 删除排序链表中的重复元素 II
    [LeetCode] 80. 删除排序数组中的重复项 II
    [LeetCode] 79. 单词搜索
    [LeetCode] 77. 组合
    转:快乐Node码农的十个习惯
    转:zookeeper3.4.5安装笔记
  • 原文地址:https://www.cnblogs.com/emanlee/p/14380797.html
Copyright © 2020-2023  润新知