我们何时在 Python Pandas 中使用 crosstab 和 pivot_table?

pythonserver side programmingprogramming更新于 2024/2/18 9:38:00

在本文中,我们将向您展示何时在 Python Pandas 中使用 crosstab() 和 pivot_table() 函数。

何时使用 crosstab 或 pivot_table

数据透视表要求您的输入数据已经是 DataFrame;您将 DataFrame 传递给数据透视表,并通过将列名作为字符串传递来指定索引/列/值。您不需要将 DataFrame 传递到交叉表中,因为您只需为索引/列/值传递类似数组的对象。

通常,如果您已经有 DataFrame,请使用数据透视表,这样您就不必创建两次相同的 DataFrame。如果您从类似数组的对象开始并且只对透视数据感兴趣,请使用 crosstab。在大多数情况下,我认为使用哪个函数不会有太大区别。

pandas.crosstab() 函数

使用此 crosstab() 方法计算两个(或更多)因子的简单交叉表。除非传递了值数组和聚合函数,否则默认计算因子的频率表。

此函数允许我们以多种方式自定义数据。乍一看,它似乎与 Pandas 数据透视表函数非常相似。

语法

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None,
aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)

参数

参数 描述 默认值
index 数组类、系列或要分组的值行
columns 类似数组、系列或列中要分组的值
values 这些是要聚合的值的数组
rownames 行的名称(列表)
colnames 列的名称(列表)
aggfunc(可选) 指定如何聚合数据,如果给定,则要求将"值"指定为很好。 count
margins 它添加行/列总计 False
margins_name 它是行/列总计的名称 "All"
dropna 删除所有条目均为 NaN 的列 True
normalize 它通过将所有值除以所有值的总和来进行规范化 False

与数据透视表函数相比,交叉表函数有几个优点,包括

  • 摘要可以标准化,以将数据显示为行或列总数的百分比。

  • 在分析之前,数据不需要构造为数据框。

Pandas 交叉表与数据透视表

使用 Pandas 交叉表可以完成的大部分操作都可以使用 Pandas 数据透视表完成。 主要区别如下 −

数据框不是该函数的输入必需的。对于其行和列,它还可以接受类似数组的对象。

该函数能够规范化输出数据框,这意味着显示的数字可以表示为行或列总数的百分比。

默认函数是 len(count),而数据透视表函数是 NumPy 的平均值。

在 Pandas 中创建交叉表

算法(步骤)

以下是执行所需任务要遵循的算法/步骤 -

  • 使用 import 关键字导入 pandas, numpy 模块。

  • 使用 array() 函数创建 numpy 数组(返回一个 ndarray。ndarray 是一个满足给定要求的数组对象) numpy 模块。

  • 使用 cross_tab() 函数为给定的 NumPy 数组创建交叉表并打印。

示例

以下程序使用 crosstab() 函数返回给定 NumPy 数组的交叉表 −

# importing pandas, numpy modules import pandas import numpy # creating numpy arrays array_1 = numpy.array(["cat", "cat", "cat", "cat", "rat", "rat", "rat", "rat", "cat", "cat", "cat"], dtype=object) array_2 = numpy.array(["pin", "pin", "pin", "bat", "pin", "pin", "pin", "bat", "bat", "bat", "pin"], dtype=object) array_3 = numpy.array(["book", "book", "car", "book", "book", "car", "car", "book", "car", "car", "car"], dtype=object) # creating a cross tab for the given numpy arrays by giving rownames as the array 1 names and column names as array2 and array 3 names print(pandas.crosstab(array_1, [array_2, array_3], rownames=['array_1'], colnames=['array_2', 'array_3']))

输出

执行时,上述程序将生成以下输出 -

array_2 bat       pin
array_3 book car book car
array_1
cat      1     2  2    2
rat      1     0  1    2

pandas.pivot_table() 函数

pivot_table() 函数以 DataFrame 形式创建电子表格样式的数据透视表。

数据透视表中的级别将作为结果 DataFrame 的索引和列保存为 MultiIndex 对象(分层索引)。

语法

pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

使用 pandas 创建一个简单的数据框

算法(步骤)

以下是执行所需任务需要遵循的算法/步骤 −

  • 使用 import 关键字,以别名导入 pandas, numpy 模块。

  • 使用 pandas 模块的 DataFrame() 函数创建数据框。

  • 打印输入数据框。

示例

以下程序使用 DataFrame() 函数返回数据框 −

# importing pandas, numpy modules with alias names import pandas as pd import numpy as np # creating a dataframe inputDataframe = pd.DataFrame({'Name': ['Virat', 'Rohit', 'Meera', 'Nick', 'Sana'], 'Jobrole': ['Developer', 'Analyst', 'Help Desk', 'Database Developer', 'Finance accountant'], 'Age': [25, 30, 28, 25, 40]}) # displaying the dataframe print(inputDataframe)

输出

执行时,上述程序将生成以下输出 -

   Name  Jobrole              Age
0 Virat  Developer            25
1 Rohit  Analyst              30
2 Meera  Help Desk            28
3 Nick   Database Developer   25
4 Sana   Finance accountant   40

创建上述数据框的透视表

示例

以下程序创建一个包含数据框和索引/索引列表的简单透视表

# importing pandas, numpy modules with alias names import pandas as pd import numpy as np # creating a dataframe inputDataframe = pd.DataFrame({'Name': ['Virat', 'Rohit', 'Meera', 'Nick','Sana'], 'Jobrole': ['Developer', 'Analyst', 'Help Desk', 'Database Developer', 'Finance accountant'],'Age': [25, 30, 28, 35, 40]}) # creating a simple pivot table that has data frame and an index/list of index. result_pivottable = pd.pivot_table(inputDataframe, index =['Name', 'Jobrole',]) # displaying the pivot table print(result_pivottable)

输出

执行时,上述程序将生成以下输出 -

Name     Jobrole              Age
Meera    Help Desk            28
Nick     Database Developer   35
Rohit    Analyst              30
Sana     Finance accountant   40
Virat    Developer            25

结论

通过一些示例,我们在本文中了解了何时使用 crosstab() 函数以及何时使用数据透视表函数。


相关文章