Pandas 基礎 (13) - Crosstab 交叉列表取值

Rachel發表於2019-04-13

這小節的題目看起來還挺晦澀的, crosstab 是 pandas 的一個函式, 作用還蠻強大的, 一起來看一下吧~~~

首先還是先引入一個例子檔案:

import pandas as pd
df = pd.read_excel('/Users/rachel/Sites/pandas/py/pandas/13_crosstab/survey.xls')
df

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

好, 下面看一下 crosstab 的功力:

pd.crosstab(df.Nationality, df.Handedness)

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

crosstab 第一個引數是列, 第二個引數是行. 還可以新增第三個引數:

pd.crosstab(df.Sex, df.Handedness, margins = True)

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

同時, 行和列都可以是複合的:

pd.crosstab(df.Sex, [df.Handedness, df.Nationality], margins = True)

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

pd.crosstab([df.Nationality, df.Sex], df.Handedness, margins = True)

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

ok, 上面介紹了 crosstab() 函式最基本的功能, 其實它還可以透過很多引數的配置實現不同的功能. 這裡分享一個小技巧, 把游標點到 crosstab 單詞上, 按下 shift + tab 鍵, 就可以彈出對這個函式的詳情(如果沒反應,就把那個單元格的程式碼執行一下, 再試) 主要是引數的使用說明, 發現真的還有好多引數啊, 下面再選兩個講一下:

求百分比:

pd.crosstab(df.Sex, df.Handedness, normalize='index')

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

求指定列的平均值:

import numpy as np
pd.crosstab(df.Sex, df.Handedness, values=df.Age, aggfunc=np.average)

輸出:

Pandas 基礎(13) - Crosstab 交叉列表取值

最後一個引數看起來有點多, 有點複雜, 那也是因為我們剛開始接觸 crosstab 函式, 所以可以結合上面介紹的方法, 開啟函式說明, 對照著裡面的引數用法, 多看幾遍 就懂了.

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章