2013-05-19 216 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