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


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

何时使用 crosstab 或 pivot_table

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

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

pandas.crosstab() 函数

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

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

语法

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(可选) 指定如何聚合数据,如果给出,则也需要指定“values”。 计数
margins 添加行/列总数 False
margins_name 行/列总数的名称 “全部”
dropna 删除所有条目均为 NaN 的列 True
normalize 通过将所有值除以所有值的总和进行归一化 False

crosstab 函数比 pivot_table 函数具有几个优点,包括:

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

  • 数据在分析前无需构建成数据框。

Pandas Crosstab 与 Pivot Table

您可以使用 Pandas Crosstab 完成的大部分工作,也可以使用 Pandas Pivot Table 完成。主要区别如下:

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

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

默认函数是 len(计数),而 pivot_table 函数是 NumPy 的均值。

在 Pandas 中创建交叉表

算法(步骤)

以下是执行所需任务的算法/步骤:

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

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

  • 使用 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。

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

语法

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

使用 pandas 创建简单的 DataFrame

算法(步骤)

以下是执行所需任务的算法/步骤:

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

  • 使用 pandas 模块的 **DataFrame()** 函数创建一个 DataFrame。

  • 打印输入 DataFrame。

示例

以下程序使用 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

创建上述 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, 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() 函数以及何时使用 pivot_table 函数。

更新于:2022年10月31日

2000+ 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告