2013-05-19 22 views
11

Ben şu anda şöyle bir pandalar Serisi vardır: ...Pandalar: yeniden şekillendirilmesi veri

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] 

Ve kökten şuna benzer bir dataframe içine yeniden şekillendirmek isteyen

 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 

yani. her gözlemin hangi kategoriye girdiğine dikkat çeken mantıklı bir yapı.

Bu sorunu çözmek için döngü tabanlı kod yazabiliyorum, ancak ele almam gereken çok sayıda satır verildiğinde, bu çok yavaş olacak.

Bu tür sorunlara yönelik bir vektör çözümünü bilen var mı? Çok minnettar olurum.

DÜZENLEME: Listemde 509 kategori var.

cevap

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

Bu, efendim, çok zekice. Altın rozetde –

+0

tebrikler! http://stackoverflow.com/help/badges/3296/pandas?userid=644898 –

+0

Bunun nasıl çalıştığını açıklayabilir misiniz? Oluşturulan bireysel diziye baktığımda, ör. Seri (1, index = s [1]), dizi indeksi (beklediğim gibi) listedeki harflerdir. Ancak s.apply(), dizi dizinleri sütun olarak bir DataFrame verir. Pivot nasıl oldu? – jdmarino

İlgili konular