I have a pandas DataFrame, eg:
x = DataFrame.from_dict({'farm' : ['A','B','A','B'], 'fruit':['apple','apple','pear','pear'], '2014':[10,12,6,8], '2015':[11,13,7,9]})
ie:
2014 2015 farm fruit 0 10 11 A apple 1 12 13 B apple 2 6 7 A pear 3 8 9 B pear
How can I convert it to this: ?
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
I have tried stack
and unstack
but haven't been able to make it work.
Thanks!
This can be done with 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')
Result:
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]
I'm not sure how common "melt" is as the name for this kind of operation, but that's what it's called in R's reshape2
package, which probably inspired the name here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With