什么时候在Python Pandas中使用crosstab和pivot_table?

什么时候在Python Pandas中使用crosstab和pivot_table?

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

何时使用crosstab或pivot_table

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

通常,如果您已经有一个数据帧,使用数据透视表可以避免您需要重复创建数据帧两次的问题。如果您从类似数组的对象开始并且仅对透视数据感兴趣,请使用交叉表。在大多数情况下,我认为使用哪个函数并没有多大区别。

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

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

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

  • 在分析之前不需要将数据结构化为数据帧。

Pandas Crosstab vs. Pivot Table

您可以使用Pandas Crosstab完成的很多操作,也可以使用Pandas PivotTable完成,主要区别如下:

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

该函数可以归一化输出数据帧,这意味着显示的数字可以表示为行或列总数的百分比。

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

在Pandas中创建交叉表

算法(步骤)

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

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

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

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

示例

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

# 导入pandas和numpy模块
import pandas
import numpy

# 创建numpy数组
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)

# 创建十字表,行名是数组1的名称,列名是数组2和数组3的名称
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() 函数返回一个数据框——

# 导入 pandas 和 numpy 模块并指定别名
import pandas as pd
import numpy as np

# 创建数据框
inputDataframe = pd.DataFrame({'Name': ['Virat', 'Rohit', 'Meera', 'Nick', 'Sana'], 'Jobrole': ['Developer', 'Analyst', 'Help Desk', 'Database Developer', 'Finance accountant'], 'Age': [25, 30, 28, 25, 40]})

# 显示数据框
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

对上面的数据框创建一个透视表

例子

以下程序创建一个简单的透视表,该透视表具有数据框和一个索引/索引列表。

# 导入 pandas 和 numpy 模块并指定别名
import pandas as pd
import numpy as np

# 创建数据框
inputDataframe = pd.DataFrame({'Name': ['Virat', 'Rohit', 'Meera', 'Nick','Sana'], 'Jobrole': ['Developer', 'Analyst', 'Help Desk', 'Database Developer', 'Finance accountant'],'Age': [25, 30, 28, 35, 40]})

# 创建一个简单的透视表,该透视表具有数据框和一个索引/索引列表。
# 创建透视表
result_pivottable = pd.pivot_table(inputDataframe, index =['Name', 'Jobrole',])

# 显示透视表
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()函数和何时使用数据透视表函数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程