2016-05-16 10 views
5

Mam dataframe że zawiera kolumny z wielu atrybutów oddzielonych przecinkami:Pandy: Konwersja listy w jednej kolumnie do wielu kolumn

df = pd.DataFrame({'id': [1,2,3], 'labels' : ["a,b,c", "c,a", "d,a,b"]})

id labels 
0 1 a,b,c 
1 2 c,a 
2 3 d,a,b 

(wiem, że to nie jest to sytuacja idealna , ale dane pochodzą ze źródła zewnętrznego.) Chcę przekształcić kolumny z wieloma atrybutami w wiele kolumn, po jednej dla każdej etykiety, aby można było traktować je jako zmienne kategoryczne. Pożądany wyjściowa:

id a  b  c  d 
0 1 True True True False 
1 2 True False True False 
2 3 True True False True 

mogę zbiór wszystkich możliwych atrybutów ([a,b,c,d]) dość łatwo, ale nie może znaleźć sposób, aby określić, czy dany wiersz ma szczególną cechę bez iteracji rząd po rzędzie dla każdego atrybut. Czy jest lepszy sposób to zrobić?

Odpowiedz

8

Można użyć get_dummies, oddanych 1 i 0 do boolean przez astype i ostatni concat kolumnie id:

print df['labels'].str.get_dummies(sep=',').astype(bool) 
     a  b  c  d 
0 True True True False 
1 True False True False 
2 True True False True 

print pd.concat([df.id, df['labels'].str.get_dummies(sep=',').astype(bool)], axis=1) 

    id  a  b  c  d 
0 1 True True True False 
1 2 True False True False 
2 3 True True False True 
Powiązane problemy