2014-04-29 31 views
18

Ho un dataframe panda, ad esempio:Come posso "annullare" le colonne specifiche da un DataFrame panda?

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

cioè:

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

Come posso convertirlo in questo:?

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 

Ho provato stack e unstack ma non sono stati in grado di farlo funzionare.

Grazie!

+0

Melt è un nome fantastico per questa funzione – kbball

risposta

20

Questo può essere fatto con 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') 

Risultato:

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] 

io non sono sicuro di come comune "fondere" è come il nome per questo tipo di operazione, ma è quello che è chiamato nel pacchetto R reshape2, che probabilmente ha ispirato il nome qui.

+0

Fantastico - grazie! –

+0

Incredibilmente facile e fantastico nome - sciogliere! Molte grazie! – kbball

Problemi correlati