• python 用 panda 实现列联表(交叉表)实例详解


    交叉表(cross-tabulation,简称crosstab)是⼀种⽤于计算分组频率的特殊透视表。

    语法详解:

    pd.crosstab(index,   #  分组依据
                columns,   #
                values=None,   # 聚合计算的值
                rownames=None,   # 列名称
                colnames=None,   # 行名称
                aggfunc=None,   # 聚合函数
                margins=False,   # 总计行/列
                dropna=True,   #  是否删除缺失值
                normalize=False    # 
               )

     

    1 crosstab() 实例1

    1.1 读取数据

    import os
    import numpy as np
    import pandas as pd
    
    file_name = os.path.join(path, 'Excel_test.xls')
    df = pd.read_excel(io=file_name,    # 工作簿路径
                       sheetname='透视表',    # 工作表名称
                       skiprows=1,    # 要忽略的行数
                       parse_cols='A:D'    # 读入的列
                      )
    df

     

    1.2 pd.crosstab() 默认生成以行和列分类的频数表

    pd.crosstab(df['客户名称'], df['产品类别'])

     

    1.3 设置跟多参数实现分类汇总

    pd.crosstab(index=df['客户名称'],
                columns=df['产品类别'],
                values=df['销量'],
                aggfunc='sum',
                margins=True
               ).round(0).fillna(0).astype('int')

    注:因为交叉表示透视表的特例,所以交叉表可以用透视表的函数实现。又因为透视表可以用更 python 的方式 groupby-apply 实现,所以,交叉表完全可以用 groupby-apply 的方式实现。

     

    2 用分类汇总的方法实现 交叉表

    df.groupby(['客户名称', '产品类别']).apply(sum)

     2.1 分类汇总、重新索引、设置数值格式综合应用

    c_tbl = df.groupby(['客户名称', '产品类别']).apply(sum)['销量'].unstack()
    c_tbl['总计'] = c_tbl.sum(axis=1)  # 添加总计列
    c_tbl.fillna(0).round(0).astype('int')

     

    软件信息:

  • 相关阅读:
    506. Relative Ranks
    504. Base 7
    503. Next Greater Element II
    501. Find Mode in Binary Search Tree
    500. Keyboard Row
    1268. Search Suggestions System
    原生 JavaScript 代替 jQuery【转】
    TP5 Request 请求对象【转】
    tp5中使用原生sql查询总结【转】
    成功安装mysql后,为何服务管理器里找不到MYSQL服务名【转】
  • 原文地址:https://www.cnblogs.com/shanger/p/13246039.html
Copyright © 2020-2023  润新知