Python / Pandas - Stack /Unstack/Melt? + Map Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
housel
User
Beiträge: 4
Registriert: Donnerstag 28. September 2023, 09:59

Hallo Zusammen,
ich habe in meiner Firma folgendes Problem, dass ich zeitnahe lösen muss:

Ich habe eine Datei mit Namen in Zeile und ca. 30 Spalten "Hauptqualifikation" und 30 Spalten "Nebenqualifikation" bekommen.
Typischerweise steht im Header die Qualifikationsbezeichnung und je Person wurde ein "x" oder ein "y" eingetragen.

Beispiel:

Code: Alles auswählen

Name         - Hauptquali 1 - Hauptquali 2 -Hauptquali 3 - Nebenquali 1 - Nebenquali 2
Mustermax                        x               x               x             x 
Musterfrau                       y                                             x                       
1.) Spalte ergänzen wenn Y vorkommt dann was reinschreiben => easy
2.) Spaltennamen an Stelle der "x" platzieren - dachte hier an MAP Funktion, dafür muss ich aber über alle spalten iterieren oder gibt es eine bessere Lösung? (MAP Funktion ersetzt je Spalte dann das "x" durch "AQ06" oder ähnliches.
3.) Dann das Dataframe mit Melt? in eine Zeilenform bringen =>

Code: Alles auswählen

Name              QUALIFIKATION        MARKER
Mustermax             AQ06
Mustermax             AQ05
Mustermax             ZF15
Mustermax             ZF45
Musterfrau             AQ06             Y
Musterfrau             ZF15            (Y)   
bin mir hier nicht sicher ob auch Y gesetzt..

Und eine zweite Ansicht wäre hier auch noch gefragt.. nach folgendem Schema - alles mit allem:

Code: Alles auswählen

Name                    Hauptquali           Nebenquali        MARKER
Mustermax                AQ06                    ZF15
Mustermax                AQ06                    ZF45
Mustermax                AQ05                    ZF15
Mustermax                AQ05                    ZF45       
Musterfrau               AQ06                    ZF15           Y
hat jemand eine elegante Lösung? Ich denke wenn ich das relativ zügig hinbekommen würde, wäre der Rest für mich allein machbar.

Danke im Vorhinein
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Code mit einem Beispiel-Dataframe und dem gewünschten Ergebnis wäre besser, dann könnten die Helfenden einfach die Beispieldaten kopieren. Mit Deiner Umschreibung machst Du das sehr kompliziert.
unstack sollte aber das Problem lösen:

Code: Alles auswählen

df = pandas.DataFrame({
    'Name':['a','b','c'],
    'AQ05':['','y','x'],
    'AQ06':['x','x','']})
df = df.set_index('Name').unstack().swaplevel()
filtered_df = df[df != ""]
Antworten