何時在 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 函式。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP