2013-05-19 39 views
11

我有一個熊貓系列,其目前看起來是這樣的:熊貓:重塑數據

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] 

我想從根本上重塑它成一個數據幀,看起來像這樣...

 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 

即。一個邏輯結構,註明每個觀察(行)所屬的類別。

我能夠編寫基於循環的代碼來解決問題,但由於需要處理大量的行,這將非常緩慢。

有沒有人知道這種問題的矢量化解決方案?我會很感激。

編輯:有509個類別,我確實有一個列表。

回答

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

那,先生,非常非常聰明。 –

+0

祝賀金徽章! http://stackoverflow.com/help/badges/3296/pandas?userid=644898 –

+0

你能解釋這是如何工作的嗎?當我查看創建的單個系列時,例如系列(1,index = s [1]),系列索引是列表中的字母(如我所料)。但是s.apply()會生成一個DataFrame,其中的系列索引爲列。樞紐是如何發生的? – jdmarino