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)