2016-03-31 17 views
1

Ich habe eine df:Drehen Datenpunkte eines Datenrahmens in Spalten

name sample 
1 a  Category 1: qwe, asd (line break) Category 2: sdf, erg 
2 b  Category 2: sdf, erg(line break) Category 5: zxc, eru 
... 
30 p  Category 1: asd, Category PE: 2134, EFDgh, Pdr tke, err 

Ich muss am Ende mit:

name qwe asd sdf erg zxc eru 2134 EFDgh Pdr tke err 
1 a  1  1  1  1 0  0 0  0  0  0 
2 b  0  0  1  1 1  1 0  0  0  0 
... 
30 p  0  1  0  0 0  0 0  1  1  0 

Ich bin ehrlich gesagt nicht einmal sicher, wo mit diesem beginnen Mein erstes ist es jedoch, es bei der Zeilenunterbrechung zu teilen, aber ich bin irgendwie verloren.

+0

, was in Ihrer 'sample' Spalte ist? ist es eine Schnur? Ein Objekt? – knightofni

+0

Da seine Pandas die Spalte von dtype Objekt ist, aber sie sind Strings. –

Antwort

1

IIUC können Sie verwenden str.findall mit Regex-Muster, um alle Wörter mit 3 Zeichen mit negative lookbehind and lookahead für Nicht-Zeichen-Symbole zu finden. Dann können Sie sich mit str.join erhaltenen Listen verbinden und erhalten Sie Ihre Dummies mit str.get_dummies. Dann könnten Sie zusätzliche Spalten fallen:

df['new'] = df['sample'].str.findall('(?<!\w)\w{3}(?!\w)') 
df_dummies = df['new'].str.join('_').str.get_dummies(sep='_') 
df = pd.concat([df, df_dummies], axis=1) 

In [215]: df['new'] 
Out[215]: 
1 [qwe, asd, sdf, erg] 
2 [sdf, erg, zxc, eru] 
Name: new, dtype: object 

In [216]: df 
Out[216]: 
    name            sample     new asd erg eru qwe sdf zxc 
1 a Category 1: qwe, asd (line break) Category 2: ... [qwe, asd, sdf, erg] 1 1 0 1 1 0 
2 b Category 2: sdf, erg(line break) Category 5: z... [sdf, erg, zxc, eru] 0 1 1 0 1 1 

Nach zusätzlichen Spalten fallen Sie Ihr Ergebnis bekommen:

df = df.drop(['sample', 'new'], axis=1) 

In [218]: df 
Out[218]: 
    name asd erg eru qwe sdf zxc 
1 a 1 1 0 1 1 0 
2 b 0 1 1 0 1 1 
+0

Works perfekt, aber ich fand, dass tief in den Daten (nicht sehr vertraut mit) gibt es Einträge wie "Kategorie 12: werr, nm eetgd" so simpyl passenden 3 Buchstaben Wörter funktionieren für alles. Irgendwelche Ideen zur Verallgemeinerung? –

+0

@MArroyo könnten Sie dieses Beispiel für Ihre Frage und erwartete Ausgabe hinzufügen? –

+0

hinzugefügt, danke! –

Verwandte Themen