Pandas 資料分析 實用小技巧(四)

2021-10-12 19:20:39 字數 4034 閱讀 9611

melt 方法固定某列為乙個維度,組合其他列名為另乙個維度,實現寬表融化為長表:

zip_code  factory  warehouse  retail

0 12345 100 200 1

1 56789 400 300 2

2 101112 500 400 3

3 131415 600 500 4

固定列zip_code,組合factorywarehouseretail三個列名為乙個維度,按照這種方法湊齊兩個維度後,資料一定變長。

pandas 的 melt 方法演示如下:

in [49]: df = df.melt(id_vars = "zip_code")
若melt方法,引數value_vars不賦值,預設剩餘所有列都是value_vars,所以結果如下:

zip_code   variable  value

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 warehouse 200

5 56789 warehouse 300

6 101112 warehouse 400

7 131415 warehouse 500

8 12345 retail 1

9 56789 retail 2

10 101112 retail 3

11 131415 retail 4

若只想檢視 factory 和 retail,則value_vars賦值為它們即可:

in [62]: df_melt2 = df.melt(id_vars = "zip_code",value_vars=['factory','reta

...: il'])

結果:

zip_code variable  value

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 retail 1

5 56789 retail 2

6 101112 retail 3

7 131415 retail 4

melt 透視資料後,因為組合多個列為1列,所以資料一定變長。

melt 是融化資料,而pivot結冰資料,它們是一對互逆操作。

這是上面 melt 後的資料:

zip_code variable  value

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 retail 1

5 56789 retail 2

6 101112 retail 3

7 131415 retail 4

現在想要還原為:

variable factory retail

zip_code

12345 100 1

56789 400 2

101112 500 3

131415 600 4

如何實現?

使用pivot方法很容易做到:

df_melt2.pivot(index='zip_code',columns='variable')
index 設定第乙個軸,為 zip_code,columns 設定哪些列或哪個列的不同取值組合為乙個軸,此處設定為 variable 列,它一共有 2 種不同的取值,分別為 factory, retail,pivot 透視後變為列名,也就是 axis = 1 的軸

pivot 方法沒有聚合功能,它的公升級版為pivot_table方法,能對資料聚合。

使用上面的 df_melt 演示不出聚合的功能:

zip_code variable  value

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 retail 1

5 56789 retail 2

6 101112 retail 3

7 131415 retail 4

資料變為:

zip_code variable  value

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 retail 1

5 56789 retail 2

6 101112 retail 3

7 131415 retail 4

0 12345 factory 100

1 56789 factory 400

2 101112 factory 500

3 131415 factory 600

4 12345 retail 1

5 56789 retail 2

6 101112 retail 3

7 131415 retail 4

此時前兩列組合存在重複項,能夠演示出聚合的效果:

dfa.pivot_table(index='zip_code',columns='variable',aggfunc=np.sum)
index 設定第乙個維度:zip_code,columns 設定第二個維度為 variable,使用 aggfunc 引數做聚合,也就是存在 zip_code + variable 重複項時,兩項 np.sum 累加,透視結果如下:

**本質是二維結構,透視是變換二維表結構的藝術,掌握以上3個小技巧後,再去透視資料可能就會變得游刃有餘一點。

資料分析 pandas

pandas是乙個強大的python資料分析的工具包,它是基於numpy構建的,正因pandas的出現,讓python語言也成為使用最廣泛而且強大的資料分析環境之一。pandas的主要功能 具備對其功能的資料結構dataframe,series 整合時間序列功能 提供豐富的數 算和操作 靈活處理缺失...

python資料分析 Pandas

import pandas as pd series 可以看做乙個定長的有序字典。基本任意的一維資料都可以用來構造 series 物件 s pd.series 1,2,3.0,abc s1 pd.series data 1,3,5,7 index a b x y 通過下標獲取資料 s1 a seri...

資料分析之Pandas

from pandas import series,dataframe import pandas as pd import numpy as np states california ohio oregon texas year 2000,2001,2002,2003 value 35000,71...