pandas基礎 part5 透視表與交叉表

2021-10-04 15:33:39 字數 4245 閱讀 1565

學習筆記,這個筆記以例子為主。

開發工具:spyder

透視表(pivot table)是各種電子**程式和其他資料分析軟體中一種常見的資料彙總工具。它根據乙個或多個鍵對資料進行分組聚合,並對每個分組進行資料彙總

# 以a與b做分組彙總資料,針對d的每個值列級分組統計,統計每個分組下c列的最大值,並新增行、列小計

data.pivot_table(index=

['a'

,'b'

], values=

['c'],

columns=

['d'

], margins=

true

, aggfunc=

'max'

)

接下來,我們用幾個例子來學習如何用pandas來製作想要的資料透視表。

首先,我們來康康接下來幾個例子所要使用的資料:

**:

import pandas as pd

leftd =

rightd =

df_leftd = pd.dataframe(leftd)

df_rightd = pd.dataframe(rightd)

df = pd.merge(df_leftd, df_rightd, how =

'outer'

)print

(df)

資料:

bunny_id  age gender    name  weight foods

0 1 9 m ada 8 a

1 1 9 m peter 5 a

2 2 9 f tom 4 b

3 2 10 m lee 10 b

4 3 10 m black 5 c

5 3 8 m blue 4 c

6 4 10 m jack 6 d

7 4 10 f yellow 10 d

8 4 7 m green 4 d

9 5 8 f trump 8 e

**:

#以bunny_id做分組彙總資料,預設統計所有列的均值

print

(df.pivot_table(index=

['bunny_id'])

)

結果:

age    weight

bunny_id

1 9.0 6.500000

2 9.5 7.000000

3 9.0 4.500000

4 9.0 6.666667

5 8.0 8.000000

由結果可知,由於除了bunny_id這個變數以外,只有age和weight為數值型變數,故pandas計算了age和weight的均值。

**:

#以bunny_id與gender做分組彙總資料,預設統計所有列的最大值

print

(df.pivot_table(index=

['bunny_id'

,'gender'

], aggfunc=

'max'

))

結果:

age foods    name  weight

bunny_id gender

1 m 9 a peter 8

2 f 9 b tom 4

m 10 b lee 10

3 m 10 c blue 5

4 f 10 d yellow 10

m 10 d jack 6

5 f 8 e trump 8

由結果可知,pandas先按照bunny_id進行分組,再按照gender進行分組。最後對分組結果,分別計算age、foods、name、weight的最大值。

**:

#以bunny_id與gender做分組彙總資料,統計age列的均值

print

(df.pivot_table(index=

['bunny_id'

,'gender'

], values=

['age'])

)

結果:

age

bunny_id gender

1 m 9.0

2 f 9.0

m 10.0

3 m 9.0

4 f 10.0

m 8.5

5 f 8.0

由結果可知,pandas先對bunny_id和gender進行分組,並只顯示age的分組平均值。

**:

#以bunny_id與gender做分組彙總資料,針對weight的每個值列級分組,統計age列的均值。

print

(df.pivot_table(index=

['bunny_id'

,'gender'],

values=

['age'

], columns=

['weight'])

)

結果;

age                       

weight 4 5 6 8 10

bunny_id gender

1 m nan 9.0 nan 9.0 nan

2 f 9.0 nan nan nan nan

m nan nan nan nan 10.0

3 m 8.0 10.0 nan nan nan

4 f nan nan nan nan 10.0

m 7.0 nan 10.0 nan nan

5 f nan nan nan 8.0 nan

由結果可知,bunny_id和gender的組合作為行,weight作為列,共同構造了二維表,表中值為每個分組中age的平均值,如果對應分組沒有值,則該位置用nan代替。

交叉表(cross-tabulation, 簡稱crosstab)是一種用於計算分組頻率的特殊透視表

# 按照a列的觀測值進行分組,針對不同的b,統計頻數

pd.crosstab(data.a, data.b, margins=

true

)

**:

print

(pd.crosstab(df.gender, df.foods)

)

結果:

foods   a  b  c  d  e

gender

f 0 1 0 1 1

m 2 1 2 2 0

Part 5 多元函式基礎

設 d subset mathbb n,d not varnothing 如果存在乙個對應法則 f 對每乙個 p x 1,x 2 cdots x n in d 都有唯一的乙個實數 y 與之對應,則稱 f forall p in d mapsto y 是 d 上的 n 元函式,記作 y f p p i...

基本概念 part5

今天我們要正式的開始學習object型別 object型別又稱為物件型別,不僅僅只是在js中有物件型別,其他的語言裡面也有物件型別,但是js中的物件其實就是一組資料和功能的集合,那麼我們要怎麼建立乙個物件呢?new關鍵字就可以創造出來乙個新的物件 這裡想起了乙個段子,程式設計師的物件都是new出來的...

Golang 學習路線 Part 5 常量

這裡是 golang 教程系列的第五部分。請閱讀 golang 教程第四部分 型別以了解 golang 基本型別。常量,一詞在 go 中用來表示固定值,如 5 89 i love go 67.89 等等。參考以下 var a int 50 var b string i love go 在上面的 中,...