交叉表(cross-tabulation,簡稱crosstab)是⼀種⽤於計算分組頻率的特殊透視表。
語法詳解:
pd.crosstab(index, # 分組依據
columns, # 列
values=None, # 聚合計算的值
rownames=None, # 列名稱
colnames=None, # 行名稱
aggfunc=None, # 聚合函數
margins=False, # 總計行/列
dropna=True, # 是否刪除缺失值
normalize=False #
)
1 crosstab() 實例1
1.1 讀取數據
import os import numpy as np import pandas as pd file_name = os.path.join(path, 'Excel_test.xls') df = pd.read_excel(io=file_name, # 工作簿路徑
sheetname='透視表', # 工作表名稱
skiprows=1, # 要忽略的行數
parse_cols='A:D' # 讀入的列
) df
1.2 pd.crosstab() 默認生成以行和列分類的頻數表
pd.crosstab(df['客戶名稱'], df['產品類別'])
1.3 設置跟多參數實現分類匯總
pd.crosstab(index=df['客戶名稱'], columns=df['產品類別'], values=df['銷量'], aggfunc='sum', margins=True ).round(0).fillna(0).astype('int')
注:因為交叉表示透視表的特例,所以交叉表可以用透視表的函數實現。又因為透視表可以用更 python 的方式 groupby-apply 實現,所以,交叉表完全可以用 groupby-apply 的方式實現。
2 用分類匯總的方法實現 交叉表
df.groupby(['客戶名稱', '產品類別']).apply(sum)
2.1 分類匯總、重新索引、設置數值格式綜合應用
c_tbl = df.groupby(['客戶名稱', '產品類別']).apply(sum)['銷量'].unstack() c_tbl['總計'] = c_tbl.sum(axis=1) # 添加總計列
c_tbl.fillna(0).round(0).astype('int')
軟件信息: