python 用 panda 實現列聯表(交叉表)實例詳解


交叉表(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')

 

 

軟件信息:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM