pandas pivot、pivot_table和melt

pandas的pivot和pivot_table 用於表格數據的行列互換,而melt用於unpivot 表格數據。

1,pivot

有如下數據集: 

import pandas as pd
import numpy as np

table = {"Item":['Item0','Item0','Item1','Item1'],
"CType":['Gold','Bronze','Gold','Silver'],
"USD":[1,2,3,4],
"EU":[5,6,7,8]}

d = pd.DataFrame(table)

 

pivot 函數只有三個參數:index 用於指定索引,columns用於指定列,values用於指定透視的數值:

DataFrame.pivot(index=None, columns=None, values=None)

對d進行透視得到的結果如下圖所示,其中CType是column name,Bronze、Gold和Silver是列值。

d.pivot(index='Item', columns='CType', values='USD')

2,pivot_table

pivot_table的功能跟pivot相似,但是pivot不能處理index和columns組合是重複的數據,但是pivot_table可以處理:

DataFrame.pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)

有如下數據,使用pivot函數會報錯,只能使用pivot_table,對於重複的數據,可以使用aggfunc函數聚合,可以理解爲:index 和columns構成的組合是分組列,在分組內部應用aggfunc函數計算聚合值。

import pandas as pd
import numpy as np

table2 = {"Item":['Item0','Item0','Item1','Item1','Item1'],
"CType":['Gold','Bronze','Gold','Silver','Silver'],
"USD":[1,2,3,4,5],
"EU":[5,6,7,8,9]}

d2 = pd.DataFrame(table2)

對數據使用pivot_table:

d2.pivot_table(index='Item',columns='CType',values='USD', aggfunc=np.mean)

 

3,melt

融合數據,參數id_vars表示ID變量,value_vars表示值變量,var_name用於指定id變量的列名,value_name用於指定值變量的列名。

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

有如下數據,該數據是寬格式的數據:

df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}})
df
   A  B  C
0  a  1  2
1  b  3  4
2  c  5  6

對數據進行融合,把寬格式轉換爲長格式:

df.melt(id_vars=['A'], value_vars=['B','C'])

 

對長格式的數據調用pivot_table,可以把長格式的數據還原爲寬格式:

md=df.melt(id_vars=['A'], value_vars=['B','C'])
md.pivot_table(values='value',columns='variable',index='A')

 

 

參考文檔:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章