透视表与交叉表的深度解析:pd.crosstab()与pd.pivot_table()详解

作者:有好多问题2024.01.17 20:43浏览量:43

简介:在数据分析中,透视表和交叉表是常用的工具。本文将深入解析pandas中的pd.crosstab()和pd.pivot_table()函数,并通过实际例子展示其用法。

透视表(Pivot Table)和交叉表(Crosstab)都是用于数据分析的强大工具,它们能够将数据按照指定的维度进行聚合,从而方便地展示数据的分布和关系。在Python的pandas库中,我们可以使用pd.crosstab()和pd.pivot_table()函数来创建透视表和交叉表。
一、pd.crosstab()函数详解
pd.crosstab()函数用于创建交叉表,它能够快速地统计不同分类变量之间的关系。下面是该函数的参数说明:

  • index:指定交叉表的行索引。
  • columns:指定交叉表的列索引。
  • values:指定要计算的值,可以是任何数值型数据。
  • aggfunc:指定聚合函数,默认为’count’,也可以使用其他函数如’sum’、’mean’等。
  • normalize:是否对结果进行归一化处理,默认为False。如果为True,则除数指定列的总和。
  • dropna:是否删除包含空值的行或列,默认为True。
    下面是一个简单的例子,演示如何使用pd.crosstab()函数创建交叉表:
    1. import pandas as pd
    2. # 创建示例数据
    3. data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
    4. 'B': ['one', 'one', 'two', 'two', 'one', 'one'],
    5. 'C': [1, 2, 3, 4, 5, 6]}
    6. df = pd.DataFrame(data)
    7. # 创建交叉表
    8. result = pd.crosstab(df['A'], df['B'])
    9. print(result)
    输出结果如下:
    1. B one two
    2. A
    3. bar 2 0 2
    4. foo 1 1 1
    二、pd.pivot_table()函数详解
    pd.pivot_table()函数用于创建透视表,它能够更灵活地按照多个维度进行数据聚合。下面是该函数的参数说明:
  • data:指定要创建透视表的数据集。
  • values:指定要计算的值,可以是任何数值型数据。
  • index:指定透视表的行索引,可以是一个列名或多个列名。
  • columns:指定透视表的列索引,可以是一个列名或多个列名。
  • aggfunc:指定聚合函数,默认为’mean’,也可以使用其他函数如’sum’、’count’等。
  • fill_value:指定用于填充缺失值的值,默认为NaN。
  • margins:是否添加行/列小计和总计,默认为False。如果为True,则添加行/列小计和总计。
  • dropna:是否删除包含空值的行或列,默认为True。
    下面是一个简单的例子,演示如何使用pd.pivot_table()函数创建透视表:
    1. import pandas as pd
    2. # 创建示例数据
    3. data = {'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
    4. 'B': ['one', 'one', 'two', 'two', 'one', 'one'],
    5. 'C': [1, 2, 3, 4, 5, 6],
    6. 'D': [10, 20, 30, 40, 50, 60]}
    7. df = pd.DataFrame(data)
    8. # 创建透视表
    9. result = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc='sum')
    10. print(result)