2014-04-29 53 views
18

我有一個熊貓據幀,例如:如何從pandas DataFrame「unpivot」特定列?

x = DataFrame.from_dict({'farm' : ['A','B','A','B'], 
         'fruit':['apple','apple','pear','pear'], 
         '2014':[10,12,6,8], 
         '2015':[11,13,7,9]}) 

即:

2014 2015 farm fruit 
0 10 11 A apple 
1 12 13 B apple 
2  6  7 A pear 
3  8  9 B pear 

我怎樣才能將其轉換爲這樣的:?

farm fruit value year 
0 A apple  10 2014 
1 B apple  12 2014 
2 A pear  6 2014 
3 B pear  8 2014 
4 A apple  11 2015 
5 B apple  13 2015 
6 A pear  7 2015 
7 B pear  9 2015 

我試圖stackunstack但一直無法使它發揮作用。

謝謝!

+0

融化是這個功能的真棒名稱 – kbball

回答

20

這可以用pd.melt()做到:

# value_name is 'value' by default, but setting it here to make it clear 
pd.melt(x, id_vars=['farm', 'fruit'], var_name='year', value_name='value') 

結果:

farm fruit year value 
0 A apple 2014  10 
1 B apple 2014  12 
2 A pear 2014  6 
3 B pear 2014  8 
4 A apple 2015  11 
5 B apple 2015  13 
6 A pear 2015  7 
7 B pear 2015  9 

[8 rows x 4 columns] 

我不知道如何共同的「融化」作爲名稱,這種操作的,但是這就是它在R的reshape2包中被稱爲,這可能在這裏激發了這個名字。

+0

奇妙 - 謝謝! –

+0

令人難以置信的簡單和真棒名稱 - 融化!非常感謝! – kbball