我们何时在 Python Pandas 中使用 crosstab 和 pivot_table?
在本文中,我们将向您展示何时在 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() 函数以及何时使用数据透视表函数。