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
,組合factory
,warehouse
,retail
三個列名為乙個維度,按照這種方法湊齊兩個維度後,資料一定變長。
pandas 的 melt 方法演示如下:
in [49]: df = df.melt(id_vars = "zip_code")
若melt方法,引數value_vars
不賦值,預設剩餘所有列都是value_vars,所以結果如下:
若只想檢視 factory 和 retail,則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
value_vars
賦值為它們即可:
結果:in [62]: df_melt2 = df.melt(id_vars = "zip_code",value_vars=['factory','reta
...: il'])
melt 透視資料後,因為組合多個列為1列,所以資料一定變長。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 是融化資料,而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...