Pandas 透視表和交叉表的實現(xiàn)示例
數(shù)學(xué)原理:
交叉表是一種在二維數(shù)據(jù)表格中統(tǒng)計頻數(shù)的方法。它將數(shù)據(jù)按照指定的行和列進行分組,然后計算每個組合的頻數(shù)。交叉表的數(shù)學(xué)原理可以用以下步驟來描述:
1. 數(shù)據(jù)分組: 首先,根據(jù)交叉表的行和列索引,將數(shù)據(jù)進行分組。
2. 頻數(shù)統(tǒng)計: 對于每個分組,統(tǒng)計該分組內(nèi)的觀測值數(shù)量(頻數(shù))。
3. 填充表格: 將統(tǒng)計得到的頻數(shù)填充到交叉表的相應(yīng)位置上。
交叉表的優(yōu)勢在于它可以快速地提供多個變量之間的關(guān)系,尤其是在分類變量之間的分析上特別有用。
透視表是一種根據(jù)一個或多個鍵對數(shù)據(jù)進行聚合的方法,然后在行和列上對數(shù)據(jù)進行分組。它提供了更靈活的方式來匯總和分析數(shù)據(jù)。透視表的數(shù)學(xué)原理可以用以下步驟來描述:
1. 數(shù)據(jù)聚合: 根據(jù)透視表的行和列索引,對原始數(shù)據(jù)進行分組和聚合。這通常涉及到某種形式的數(shù)據(jù)聚合操作,如求和、平均值等。
2. 行列分組: 將聚合后的數(shù)據(jù)根據(jù)透視表的行和列索引進行進一步的分組,以形成透視表格。
3. 填充表格: 將聚合后的數(shù)據(jù)填充到透視表的相應(yīng)位置上。
透視表相比于交叉表更加靈活,因為它允許我們在生成表格時進行更多的定制,如使用不同的聚合函數(shù)、添加行/列邊距匯總等??偟膩碚f,交叉表和透視表都是用于匯總和分析數(shù)據(jù)的工具,它們的數(shù)學(xué)原理都涉及到數(shù)據(jù)的分組、聚合和填充,但透視表相比于交叉表在功能上更加靈活。
表格總結(jié):
讓我們以表格的形式呈現(xiàn)交叉表和透視表的數(shù)學(xué)原理的相同點和不同點:
方面 | 交叉表 | 透視表 |
數(shù)據(jù)處理方式 | 對數(shù)據(jù)進行頻數(shù)統(tǒng)計和匯總 | 對數(shù)據(jù)進行分組、聚合和填充 |
數(shù)據(jù)處理步驟 | 1. 數(shù)據(jù)分組 2. 頻數(shù)統(tǒng)計 3. 填充表格 | 1. 數(shù)據(jù)聚合 2. 行列分組 3. 填充表格 |
行列索引的使用 | 使用指定的行和列索引對數(shù)據(jù)進行分組 | 使用指定的行和列索引對數(shù)據(jù)進行分組 |
聚合函數(shù)的使用 | 不常用,通常是簡單的頻數(shù)統(tǒng)計 | 可以使用各種聚合函數(shù),如求和、平均值等 |
靈活性 | 較低,功能相對簡單 | 較高,可以進行更多的定制,如添加邊距匯總、使用不同的聚合函數(shù)等 |
用途 | 用于統(tǒng)計頻數(shù)、探索分類變量之間的關(guān)系 | 用于數(shù)據(jù)的匯總、分析和可視化 |
這個表格簡明地總結(jié)了交叉表和透視表在數(shù)學(xué)原理上的相同點和不同點。雖然它們都用于數(shù)據(jù)的匯總和分析,但在處理方式、步驟、靈活性和用途等方面有所不同。
數(shù)據(jù)交叉表分析
pd.crosstab()分析
數(shù)據(jù)交叉表分析是一種統(tǒng)計方法,用于匯總和分析兩個或多個變量之間的關(guān)系。在 Pandas 中,可以使用 pd.crosstab() 函數(shù)來進行數(shù)據(jù)交叉表分析。讓我們以一個示例來說明其用法:
具體參數(shù):
- index: 想要作為行索引的列名或者數(shù)組,可選參數(shù)。
- columns: 想要作為列索引的列名或者數(shù)組,可選參數(shù)。
- values: 可選參數(shù),用于指定要聚合的數(shù)值列名或者數(shù)組。
- aggfunc: 可選參數(shù),指定聚合函數(shù),例如 sum、mean、count 等,默認(rèn)為 count。
- rownames: 可選參數(shù),用于設(shè)置行索引的名稱。
- colnames: 可選參數(shù),用于設(shè)置列索引的名稱。
- margins: 可選參數(shù),布爾值,默認(rèn)為 False,表示是否添加行/列邊距匯總。
- normalize: 可選參數(shù),參數(shù)用于控制交叉表的歸一化方式。歸一化是將數(shù)據(jù)轉(zhuǎn)換為相對值的過程,通常通過除以總和來實現(xiàn)。normalize 參數(shù)可以設(shè)置為不同的值,具體含義如下 normalize:默認(rèn)為False,是否要進行規(guī)范化。
如果傳入為‘all’或者是True,將所有的值進行歸一化。
如果傳入為‘index’,根據(jù)每行進行歸一化。
如果傳入為‘columns’,根據(jù)每列進行歸一化。
如果margins為True,小計列和行也會進行歸一化。
代碼示例
import pandas as pd # 創(chuàng)建示例數(shù)據(jù) data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Product': ['A', 'B', 'A', 'B', 'A', 'B'], 'Month': [1, 1, 2, 2, 3, 3], 'Amount': [100, 200, 150, 250, 180, 220] } df = pd.DataFrame(data) # 創(chuàng)建交叉表1:統(tǒng)計銷售人員和產(chǎn)品類型的數(shù)量 cross_table1 = pd.crosstab(df['Salesperson'], df['Product']) print("Cross Table 1:") print(cross_table1) # 創(chuàng)建交叉表2:統(tǒng)計每個銷售人員在每個月份的銷售總額 cross_table2 = pd.crosstab(df['Salesperson'], df['Month'], values=df['Amount'], aggfunc='sum') print("\nCross Table 2:") print(cross_table2) # 創(chuàng)建交叉表3:包含行/列邊距匯總 cross_table3 = pd.crosstab(df['Salesperson'], df['Product'], margins=True) print("\nCross Table 3:") print(cross_table3) # 創(chuàng)建交叉表4:歸一化,將每個值除以每行的總和 cross_table4 = pd.crosstab(df['Salesperson'], df['Product'], normalize='index') print("\nCross Table 4:") print(cross_table4)
不同 normalize 參數(shù)值的效果:
import pandas as pd data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Product': ['A', 'B', 'A', 'B', 'A', 'B'], 'Amount': [100, 200, 150, 250, 180, 220] } df = pd.DataFrame(data) # 不進行歸一化 cross_table_false = pd.crosstab(df['Salesperson'], df['Product'], normalize=False) print("Without normalization:") print(cross_table_false) # 對每個行進行歸一化 cross_table_row = pd.crosstab(df['Salesperson'], df['Product'], normalize='index') print("\nNormalized by row:") print(cross_table_row) # 每個列進行歸一化 cross_table_col = pd.crosstab(df['Salesperson'], df['Product'], normalize='columns') print("\nNormalized by column:") print(cross_table_col) # 對整個表進行歸一化 cross_table_all = pd.crosstab(df['Salesperson'], df['Product'], normalize='all') print("\nNormalized by all:") print(cross_table_all)
數(shù)據(jù)透視表分析
pd.pivot_table()分析
透視表是一種數(shù)據(jù)匯總工具,允許你根據(jù)一個或多個鍵對數(shù)據(jù)進行聚合,然后在行和列上對數(shù)據(jù)進行分組。這使得你可以更輕松地理解數(shù)據(jù)的結(jié)構(gòu)和關(guān)系,并從中提取有價值的信息。
pd.pivot_table() 函數(shù)可以將原始數(shù)據(jù)轉(zhuǎn)換為透視表格式,它提供了靈活的參數(shù)設(shè)置,使得你可以根據(jù)自己的需求定制透視表的形式。
參數(shù)介紹:
- data: DataFrame,表示要進行透視操作的原始數(shù)據(jù)。
- values: 需要聚合的列名,可以是單個列名或者包含多個列名的列表。
- index: 透視表的行索引,可以是單個列名或者包含多個列名的列表。
- columns: 透視表的列索引,可以是單個列名或者包含多個列名的列表。
- aggfunc: 聚合函數(shù),用于對值進行聚合,默認(rèn)為 'mean'。
- fill_value: 在透視表中替換缺失值的值,默認(rèn)為 None。
- margins: 是否添加行/列邊距匯總,默認(rèn)為 False。
- margins_name: 邊距匯總的名稱,默認(rèn)為 'All'。
- dropna: 是否刪除包含缺失值的行/列,默認(rèn)為 True。
代碼示例
import pandas as pd data = { 'Salesperson': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'], 'Product': ['A', 'B', 'A', 'B', 'A', 'B'], 'Amount': [100, 200, 150, 250, 180, 220] } df = pd.DataFrame(data) # 創(chuàng)建透視表 pivot_table_basic = pd.pivot_table(df, values='Amount', index='Salesperson', columns='Product', aggfunc='sum', fill_value=0) print("Basic Pivot Table:") print(pivot_table_basic) 添加行/列邊距匯總 # 創(chuàng)建透視表并添加行/列邊距匯總 pivot_table_with_margins = pd.pivot_table(df, values='Amount', index='Salesperson', columns='Product', aggfunc='sum', fill_value=0, margins=True) print("\nPivot Table with Margins:") print(pivot_table_with_margins) # 創(chuàng)建透視表并使用不同的聚合函數(shù) pivot_table_aggfunc = pd.pivot_table(df, values='Amount', index='Salesperson', columns='Product', aggfunc='mean', fill_value=0) print("\nPivot Table with Different Aggregation Function (mean):") print(pivot_table_aggfunc) # 創(chuàng)建透視表并填充缺失值 pivot_table_fill_value = pd.pivot_table(df, values='Amount', index='Salesperson', columns='Product', aggfunc='sum', fill_value='No Sales') print("\nPivot Table with Fill Value for Missing Data:") print(pivot_table_fill_value) # 創(chuàng)建透視表并使用多個行索引和列索引 df['Year'] = pd.to_datetime('today').year pivot_table_multi_index = pd.pivot_table(df, values='Amount', index=['Salesperson', 'Year'], columns=['Product'], aggfunc='sum', fill_value=0) print("\nPivot Table with Multiple Index and Columns:") print(pivot_table_multi_index)
到此這篇關(guān)于Pandas 透視表和交叉表的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Pandas 透視表和交叉表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- pandas中使用數(shù)據(jù)透視表的示例代碼
- Pandas實現(xiàn)(pivot_table函數(shù))數(shù)據(jù)透視表方式
- python pandas最常用透視表實現(xiàn)應(yīng)用案例
- Pandas透視表與交叉表的使用
- Pandas數(shù)據(jù)分析之pandas數(shù)據(jù)透視表和交叉表
- Python+Pandas實現(xiàn)數(shù)據(jù)透視表
- python 用pandas實現(xiàn)數(shù)據(jù)透視表功能
- Pandas透視表(pivot_table)詳解
- pandas 透視表中文字段排序方法
- Pandas透視表(Pivot Table)的具體使用
相關(guān)文章
NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼
結(jié)構(gòu)化數(shù)組是 NumPy 中用于處理異質(zhì)數(shù)據(jù)的重要工具,通過定義復(fù)雜的數(shù)據(jù)類型,我們可以創(chuàng)建具有不同字段的數(shù)組,本文主要介紹了NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-01-01tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法
本篇文章主要介紹了tensorflow入門之訓(xùn)練簡單的神經(jīng)網(wǎng)絡(luò)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02