web-dev-qa-db-fra.com

En face de la fonte dans python pandas

Je ne peux pas comprendre comment faire "reverse melt" en utilisant Pandas en python. Ce sont mes données de départ

import pandas as pd

from StringIO import StringIO

Origin = pd.read_table(StringIO('''label    type    value
x   a   1
x   b   2
x   c   3
y   a   4
y   b   5
y   c   6
z   a   7
z   b   8
z   c   9'''))

Origin
Out[5]: 
  label type  value
0     x    a      1
1     x    b      2
2     x    c      3
3     y    a      4
4     y    b      5
5     y    c      6
6     z    a      7
7     z    b      8
8     z    c      9

Voici la sortie que j'aimerais avoir:

    label   a   b   c
        x   1   2   3
        y   4   5   6
        z   7   8   9

Je suis sûr qu'il existe un moyen facile de le faire, mais je ne sais pas comment.

42
Boris Gorelik

il y a plusieurs façons;
en utilisant .pivot :

>>> Origin.pivot(index='label', columns='type')['value']
type   a  b  c
label         
x      1  2  3
y      4  5  6
z      7  8  9

[3 rows x 3 columns]

en utilisant pivot_table :

>>> Origin.pivot_table(values='value', index='label', columns='type')
       value      
type       a  b  c
label             
x          1  2  3
y          4  5  6
z          7  8  9

[3 rows x 3 columns]

ou .groupby suivi de .unstack :

>>> Origin.groupby(['label', 'type'])['value'].aggregate('mean').unstack()
type   a  b  c
label         
x      1  2  3
y      4  5  6
z      7  8  9

[3 rows x 3 columns]
57
behzad.nouri