何時在 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+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.