Pandas 透視表和交叉表的實現示例
數學原理:
交叉表是一種在二維數據表格中統(tǒng)計頻數的方法。它將數據按照指定的行和列進行分組,然后計算每個組合的頻數。交叉表的數學原理可以用以下步驟來描述:
1. 數據分組: 首先,根據交叉表的行和列索引,將數據進行分組。
2. 頻數統(tǒng)計: 對于每個分組,統(tǒng)計該分組內的觀測值數量(頻數)。
3. 填充表格: 將統(tǒng)計得到的頻數填充到交叉表的相應位置上。
交叉表的優(yōu)勢在于它可以快速地提供多個變量之間的關系,尤其是在分類變量之間的分析上特別有用。
透視表是一種根據一個或多個鍵對數據進行聚合的方法,然后在行和列上對數據進行分組。它提供了更靈活的方式來匯總和分析數據。透視表的數學原理可以用以下步驟來描述:
1. 數據聚合: 根據透視表的行和列索引,對原始數據進行分組和聚合。這通常涉及到某種形式的數據聚合操作,如求和、平均值等。
2. 行列分組: 將聚合后的數據根據透視表的行和列索引進行進一步的分組,以形成透視表格。
3. 填充表格: 將聚合后的數據填充到透視表的相應位置上。
透視表相比于交叉表更加靈活,因為它允許我們在生成表格時進行更多的定制,如使用不同的聚合函數、添加行/列邊距匯總等??偟膩碚f,交叉表和透視表都是用于匯總和分析數據的工具,它們的數學原理都涉及到數據的分組、聚合和填充,但透視表相比于交叉表在功能上更加靈活。
表格總結:
讓我們以表格的形式呈現交叉表和透視表的數學原理的相同點和不同點:
方面 | 交叉表 | 透視表 |
數據處理方式 | 對數據進行頻數統(tǒng)計和匯總 | 對數據進行分組、聚合和填充 |
數據處理步驟 | 1. 數據分組 2. 頻數統(tǒng)計 3. 填充表格 | 1. 數據聚合 2. 行列分組 3. 填充表格 |
行列索引的使用 | 使用指定的行和列索引對數據進行分組 | 使用指定的行和列索引對數據進行分組 |
聚合函數的使用 | 不常用,通常是簡單的頻數統(tǒng)計 | 可以使用各種聚合函數,如求和、平均值等 |
靈活性 | 較低,功能相對簡單 | 較高,可以進行更多的定制,如添加邊距匯總、使用不同的聚合函數等 |
用途 | 用于統(tǒng)計頻數、探索分類變量之間的關系 | 用于數據的匯總、分析和可視化 |
這個表格簡明地總結了交叉表和透視表在數學原理上的相同點和不同點。雖然它們都用于數據的匯總和分析,但在處理方式、步驟、靈活性和用途等方面有所不同。
數據交叉表分析
pd.crosstab()分析
數據交叉表分析是一種統(tǒng)計方法,用于匯總和分析兩個或多個變量之間的關系。在 Pandas 中,可以使用 pd.crosstab() 函數來進行數據交叉表分析。讓我們以一個示例來說明其用法:
具體參數:
- index: 想要作為行索引的列名或者數組,可選參數。
- columns: 想要作為列索引的列名或者數組,可選參數。
- values: 可選參數,用于指定要聚合的數值列名或者數組。
- aggfunc: 可選參數,指定聚合函數,例如 sum、mean、count 等,默認為 count。
- rownames: 可選參數,用于設置行索引的名稱。
- colnames: 可選參數,用于設置列索引的名稱。
- margins: 可選參數,布爾值,默認為 False,表示是否添加行/列邊距匯總。
- normalize: 可選參數,參數用于控制交叉表的歸一化方式。歸一化是將數據轉換為相對值的過程,通常通過除以總和來實現。normalize 參數可以設置為不同的值,具體含義如下 normalize:默認為False,是否要進行規(guī)范化。
如果傳入為‘all’或者是True,將所有的值進行歸一化。
如果傳入為‘index’,根據每行進行歸一化。
如果傳入為‘columns’,根據每列進行歸一化。
如果margins為True,小計列和行也會進行歸一化。
代碼示例
import pandas as pd
# 創(chuàng)建示例數據
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)計銷售人員和產品類型的數量
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 參數值的效果:
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)數據透視表分析
pd.pivot_table()分析
透視表是一種數據匯總工具,允許你根據一個或多個鍵對數據進行聚合,然后在行和列上對數據進行分組。這使得你可以更輕松地理解數據的結構和關系,并從中提取有價值的信息。
pd.pivot_table() 函數可以將原始數據轉換為透視表格式,它提供了靈活的參數設置,使得你可以根據自己的需求定制透視表的形式。
參數介紹:
- data: DataFrame,表示要進行透視操作的原始數據。
- values: 需要聚合的列名,可以是單個列名或者包含多個列名的列表。
- index: 透視表的行索引,可以是單個列名或者包含多個列名的列表。
- columns: 透視表的列索引,可以是單個列名或者包含多個列名的列表。
- aggfunc: 聚合函數,用于對值進行聚合,默認為 '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)建透視表并使用不同的聚合函數
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)到此這篇關于Pandas 透視表和交叉表的實現示例的文章就介紹到這了,更多相關Pandas 透視表和交叉表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

