2013-05-19 3 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] 

을 그리고 근본적으로 이런 걸 보이는 dataframe로 모양을 변경하려는

 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 

즉. 각 관찰 (행)이 속하는 카테고리를 나타내는 논리적 구성.

문제를 해결하기 위해 루프 기반 코드를 작성할 수 있지만 처리해야 할 행 수가 많으면 속도가 느려질 것입니다.

누구나 이런 종류의 문제에 대한 벡터화 된 해결책을 알고 있습니까? 나는 매우 감사 할 것입니다.

EDIT : 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

어떻게 작동하는지 설명해 주시겠습니까? 생성 된 개별 시리즈를 볼 때. Series (1, index = s [1]), 시리즈 인덱스는 목록에있는 문자입니다 (예상했던대로). 그러나 s.apply()는 계열 인덱스가있는 DataFrame을 열로 생성합니다. 피벗은 어떻게 이루어 졌습니까? – jdmarino