[FIXED] So finden und extrahieren Sie Teile einer Zeichenfolge in einer Pandas-Spalte und codieren sie in neue Spalten

Ausgabe

Ich habe einen Pandas-Datenrahmen mit einer Spalte wie dieser:

Ausweis Sprache
01 Spanisch – C1
02 Nein
03 Spanisch – B2
04 Spanisch – C1 / Deutsch – C1 / Portugiesisch – C1
05 Nein
06 Deutsch C2
07 Nein
08 Spanisch – B2 / Portugiesisch – C1

Jede ID kann keine Sprache haben (‘Nein’), sie kann eine einzelne Sprache haben, gefolgt von ihrem Niveau (z. B. ‘Spanisch – B2’) oder sie kann mehrere Sprachen haben, deren Niveau durch das Symbol “/” getrennt ist (z. B. ” Italienisch-B1 / Portugiesisch-C2″).

Die Idee ist, in neuen Spalten mit den Informationen aus der Spalte „Sprache“ zu codieren. Zum Beispiel so etwas:

Ich würde nein_lang Spanisch – B2 Spanisch – C1 Deutsch – C1 Deutsch – C2 Portugiesisch – C1
01 0 0 1 0 0 0
02 1 0 0 0 0 0
03 0 1 0 0 0 0
04 0 0 1 1 0 1
05 1 0 0 0 0 0
06 0 0 0 0 1 0
07 1 0 0 0 0 0
08 0 1 0 0 0 1

Bei mehreren Sprachen erscheinen diese immer in alphabetischer Reihenfolge.

Ich stelle mir vor, das ist komplex und ich weiß nicht, wo ich anfangen soll.

Danke im Voraus! Jede Hilfe ist willkommen!

Lösung

Eine mögliche Lösung, basierend auf pandas.crosstab:

df['language'] = df['language'].str.split(' / ')
df = df.explode('language')
pd.crosstab(index=df['Id'], columns=df['language'])

Ausgabe:

language  German - C1  German C2  No  Portuguese - C1  Spanish - B2  \
Id                                                                    
1                   0          0   0                0             0   
2                   0          0   1                0             0   
3                   0          0   0                0             1   
4                   1          0   0                1             0   
5                   0          0   1                0             0   
6                   0          1   0                0             0   
7                   0          0   1                0             0   
8                   0          0   0                1             1   

language  Spanish - C1  
Id                      
1                    1  
2                    0  
3                    0  
4                    1  
5                    0  
6                    0  
7                    0  
8                    0  


Beantwortet von –
PaulS


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like