zoukankan      html  css  js  c++  java
  • 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')

     

    软件信息:

  • 相关阅读:
    OJ:自己实现一个简单的 priority_queue
    OJ:访问 const 成员函数问题
    OJ:重载 << 运算符
    Qt 编程中 namespace Ui { class Widget; } 解析
    QT 实现图片旋转的两种方法
    QTimer 的使用
    QT 完美实现圆形按钮
    QT 设置有效绘图区域
    基于 LWIP 建立 TCP Server 与主机通信实验
    大整数相乘 分治法 和 循环暴力法
  • 原文地址:https://www.cnblogs.com/shanger/p/13246039.html
Copyright © 2011-2022 走看看