2013-05-19 16 views
11

ho una serie panda che attualmente si presenta così:Pandas: dati rimodellamento

14 [Yellow, Pizza, Restaurants] 
... 
160920     [Automotive, Auto Parts & Supplies] 
160921  [Lighting Fixtures & Equipment, Home Services] 
160922     [Food, Pizza, Candy Stores] 
160923   [Hair Removal, Nail Salons, Beauty & Spas] 
160924   [Hair Removal, Nail Salons, Beauty & Spas] 

e voglio rimodellare radicalmente in un dataframe che sembra qualcosa di simile ...

 Yellow Automotive Pizza 
14  1   0  1 
…   
160920 0   1  0 
160921 0   0  0 
160922 0   0  1 
160923 0   0  0 
160924 0   0  0 

vale a dire. una costruzione logica che indica in quali categorie cade ogni osservazione (riga).

Sono in grado di scrivere codice in loop per risolvere il problema, ma dato il grande numero di righe che devo gestire, sarà molto lento.

Qualcuno conosce una soluzione vettoriale per questo tipo di problema? Sarei molto grato

MODIFICA: ci sono 509 categorie, di cui ho una lista.

risposta

27
In [9]: s = Series([list('ABC'),list('DEF'),list('ABEF')]) 

In [10]: s 
Out[10]: 
0  [A, B, C] 
1  [D, E, F] 
2 [A, B, E, F] 
dtype: object 

In [11]: s.apply(lambda x: Series(1,index=x)).fillna(0) 
Out[11]: 
    A B C D E F 
0 1 1 1 0 0 0 
1 0 0 0 1 1 1 
2 1 1 0 0 1 1 
+9

Questo, signore, è molto, molto intelligente. –

+0

congratulazioni sul distintivo d'oro! http://stackoverflow.com/help/badges/3296/pandas?userid=644898 –

+0

Puoi spiegare come funziona? Quando guardo le singole serie che vengono create, ad es. Serie (1, indice = s [1]), l'indice serie sono le lettere nella lista (come mi aspetterei). Ma s.apply() produce un DataFrame con gli indici della serie come colonne. Come è successo il perno? – jdmarino

Problemi correlati