Pandas 透視表和交叉表的實現(xiàn)示例
數(shù)學原理:
交叉表是一種在二維數(shù)據(jù)表格中統(tǒng)計頻數(shù)的方法。它將數(shù)據(jù)按照指定的行和列進行分組,然后計算每個組合的頻數(shù)。交叉表的數(shù)學原理可以用以下步驟來描述:
1. 數(shù)據(jù)分組: 首先,根據(jù)交叉表的行和列索引,將數(shù)據(jù)進行分組。
2. 頻數(shù)統(tǒng)計: 對于每個分組,統(tǒng)計該分組內(nèi)的觀測值數(shù)量(頻數(shù))。
3. 填充表格: 將統(tǒng)計得到的頻數(shù)填充到交叉表的相應位置上。
交叉表的優(yōu)勢在于它可以快速地提供多個變量之間的關(guān)系,尤其是在分類變量之間的分析上特別有用。
透視表是一種根據(jù)一個或多個鍵對數(shù)據(jù)進行聚合的方法,然后在行和列上對數(shù)據(jù)進行分組。它提供了更靈活的方式來匯總和分析數(shù)據(jù)。透視表的數(shù)學原理可以用以下步驟來描述:
1. 數(shù)據(jù)聚合: 根據(jù)透視表的行和列索引,對原始數(shù)據(jù)進行分組和聚合。這通常涉及到某種形式的數(shù)據(jù)聚合操作,如求和、平均值等。
2. 行列分組: 將聚合后的數(shù)據(jù)根據(jù)透視表的行和列索引進行進一步的分組,以形成透視表格。
3. 填充表格: 將聚合后的數(shù)據(jù)填充到透視表的相應位置上。
透視表相比于交叉表更加靈活,因為它允許我們在生成表格時進行更多的定制,如使用不同的聚合函數(shù)、添加行/列邊距匯總等。總的來說,交叉表和透視表都是用于匯總和分析數(shù)據(jù)的工具,它們的數(shù)學原理都涉及到數(shù)據(jù)的分組、聚合和填充,但透視表相比于交叉表在功能上更加靈活。
表格總結(jié):
讓我們以表格的形式呈現(xiàn)交叉表和透視表的數(shù)學原理的相同點和不同點:
方面 | 交叉表 | 透視表 |
數(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ù)學原理上的相同點和不同點。雖然它們都用于數(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 等,默認為 count。
- rownames: 可選參數(shù),用于設置行索引的名稱。
- colnames: 可選參數(shù),用于設置列索引的名稱。
- margins: 可選參數(shù),布爾值,默認為 False,表示是否添加行/列邊距匯總。
- normalize: 可選參數(shù),參數(shù)用于控制交叉表的歸一化方式。歸一化是將數(shù)據(jù)轉(zhuǎn)換為相對值的過程,通常通過除以總和來實現(xiàn)。normalize 參數(shù)可以設置為不同的值,具體含義如下 normalize:默認為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ù)設置,使得你可以根據(jù)自己的需求定制透視表的形式。
參數(shù)介紹:
- data: DataFrame,表示要進行透視操作的原始數(shù)據(jù)。
- values: 需要聚合的列名,可以是單個列名或者包含多個列名的列表。
- index: 透視表的行索引,可以是單個列名或者包含多個列名的列表。
- columns: 透視表的列索引,可以是單個列名或者包含多個列名的列表。
- aggfunc: 聚合函數(shù),用于對值進行聚合,默認為 'mean'。
- fill_value: 在透視表中替換缺失值的值,默認為 None。
- margins: 是否添加行/列邊距匯總,默認為 False。
- margins_name: 邊距匯總的名稱,默認為 'All'。
- dropna: 是否刪除包含缺失值的行/列,默認為 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)應用案例
- 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ù)的重要工具,通過定義復雜的數(shù)據(jù)類型,我們可以創(chuàng)建具有不同字段的數(shù)組,本文主要介紹了NumPy實現(xiàn)結(jié)構(gòu)化數(shù)組的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-01-01
tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡方法
本篇文章主要介紹了tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

