2016-05-16 11 views
5

ich einen Datenrahmen, die durch Komma getrennt Spalten mit mehreren Attributen gehören:Pandas: Konvertieren Listen innerhalb einer einzigen Spalte, um mehrere Spalten

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 

(ich weiß, dass dies keine ideale Situation ist , aber die Daten stammen von einer externen Quelle.) Ich möchte die Multi-Attribut-Spalten in mehrere Spalten, eine für jede Beschriftung, umwandeln, so dass ich sie als kategorische Variablen behandeln kann. Gewünschte Ausgabe:

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

ich die Menge aller möglichen Attribute erhalten kann ([a,b,c,d]) ziemlich leicht, kann aber nicht einen Weg finden, um zu bestimmen, ob eine bestimmte Zeile hat ein bestimmtes Attribut ohne Zeile-für-Zeile-Iteration für jeden Attribut. Gibt es einen besseren Weg, dies zu tun?

Antwort

8

Sie get_dummies verwenden können, werfen 1 und 0 zu boolean von astype und letzte concat Spalte 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