何时在 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 函数。