zoukankan      html  css  js  c++  java
  • Pandas进阶——透视表和交叉表

      一、透视表

      1、什么是透视表

      透视表是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上得分组建将数据分配到各个矩形区域中。在pandas中,可以通过pivot_table函数创建透视表。

       2、透视表参数 

    DataFrame.pivot_table(self, values=None, index=None, columns=None,ggfunc='mean', fill_value=None,.margins=False,dropna=True, margins_name='All')

      3、示例及其输出

    # 示例
    data = {'A': [1, 2, 2, 3, 2, 4],
            'B': [2014, 2015, 2014, 2014, 2015, 2017],
            'C': ["a", "b", "c", "d", "e", "f"],
            'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]
            }
    df = pd.DataFrame(data)
    df.pivot_table(index=["B"], columns=["C"], values=["A"], aggfunc=sum, margins=True)
    # 输出
            A
    C       a    b    c    d    e    f All
    B
    2014  1.0  NaN  2.0  3.0  NaN  NaN   6
    2015  NaN  2.0  NaN  NaN  2.0  NaN   4
    2017  NaN  NaN  NaN  NaN  NaN  4.0   4
    All   1.0  2.0  2.0  3.0  2.0  4.0  14

      二、交叉表

      1、什么是交叉表

      交叉表是一种用于计算分组频率的特殊透视表。通常使用crosstab函数来创建交叉表。

      2、crosstab参数

    1 pd.crosstab(index,columns,values=None,rownames=None
    2 ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)

      3、示例

    # 示例
    data = {'A': [1, 2, 2, 3, 2, 4],
            'B': [2014, 2015, 2014, 2014, 2015, 2017],
            'C': ["a", "b", "c", "d", "e", "f"],
            'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]
            }
    df = pd.DataFrame(data)
    pd.crosstab(index=[df["B"],df["A"]], columns=df["C"], values=df["A"], aggfunc=sum, margins=True)
    # 输出
    C         a    b    c    d    e    f  All
    B    A
    2014 1  1.0  NaN  NaN  NaN  NaN  NaN    1
         2  NaN  NaN  2.0  NaN  NaN  NaN    2
         3  NaN  NaN  NaN  3.0  NaN  NaN    3
    2015 2  NaN  2.0  NaN  NaN  2.0  NaN    4
    2017 4  NaN  NaN  NaN  NaN  NaN  4.0    4
    All     1.0  2.0  2.0  3.0  2.0  4.0   14

      三、实例分析

      使用Pandas中的read_csv函数加载step2/tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间(time)、每个星期下(day)的小费(tip)总和情况。

      代码:

    import pandas as pd
    
    #创建透视表
    def create_pivottalbe(data):
        df = pd.DataFrame(data)
        return df.pivot_table(index=["day"],columns=["time"],values=["tip"],aggfunc=sum, margins=True)
     
    #创建交叉表
    def create_crosstab(data):
        df = pd.DataFrame(data)
        return pd.crosstab(index=df["day"], columns=df["time"], values=df["tip"], aggfunc=sum, margins=True)
    
    def main():
        #读取csv文件数据并赋值给data
        data=pd.read_csv('step2/tip.csv')
        piv_result = create_pivottalbe(data)
        cro_result = create_crosstab(data)
        print("透视表:
    {}".format(piv_result))
        print("交叉表:
    {}".format(cro_result))
    
    if __name__ == '__main__':
        main()

      运行结果:

  • 相关阅读:
    在Linux中运行Nancy应用程序
    医疗行业信息化学习资源
    Windows Live Writer 的昨日荣光
    读书笔记:李叔同,说佛(上),为人十训
    使用Expression Tree构建动态LINQ查询
    读书笔记:季羡林关于如何做研究学问的心得
    XML序列化的时候如何支持Namespace
    Kafka Consumer
    Linux环境安装Golang
    Linux 下 zip 文件解压乱码如何解决
  • 原文地址:https://www.cnblogs.com/Chen-K/p/12391615.html
Copyright © 2011-2022 走看看