Ich habe den folgenden Beispieldatenrahmen:
df = pd.DataFrame(data = {'RecordID' : [1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5], 'DisplayLabel' : ['Source','Test','Value 1','Value 2','Value3','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2','Source','Test','Value 1','Value 2'],
'Value' : ['Web','Logic','S','I','Complete','Person','Voice','>20','P','Mail','OCR','A','I','Dictation','Understandable','S','I','Web','Logic','R','S']})
Dadurch wird dieser Datenrahmen erstellt:
+-------+----------+---------------+----------------+
| Index | RecordID | Display Label | Value |
+-------+----------+---------------+----------------+
| 0 | 1 | Source | Web |
| 1 | 1 | Test | Logic |
| 2 | 1 | Value 1 | S |
| 3 | 1 | Value 2 | I |
| 4 | 1 | Value 3 | Complete |
| 5 | 2 | Source | Person |
| 6 | 2 | Test | Voice |
| 7 | 2 | Value 1 | >20 |
| 8 | 2 | Value 2 | P |
| 9 | 3 | Source | Mail |
| 10 | 3 | Test | OCR |
| 11 | 3 | Value 1 | A |
| 12 | 3 | Value 2 | I |
| 13 | 4 | Source | Dictation |
| 14 | 4 | Test | Understandable |
| 15 | 4 | Value 1 | S |
| 16 | 4 | Value 2 | I |
| 17 | 5 | Source | Web |
| 18 | 5 | Test | Logic |
| 19 | 5 | Value 1 | R |
| 20 | 5 | Value 2 | S |
+-------+----------+---------------+----------------+
Ich versuche, die Quell- und Testspalten in neue Datenrahmenspalten zu "entschmelzen", obwohl dies nicht der Fall ist:
+-------+----------+-----------+----------------+---------------+----------+
| Index | RecordID | Source | Test | Result | Value |
+-------+----------+-----------+----------------+---------------+----------+
| 0 | 1 | Web | Logic | Value 1 | S |
| 1 | 1 | Web | Logic | Value 2 | I |
| 2 | 1 | Web | Logic | Value 3 | Complete |
| 3 | 2 | Person | Voice | Value 1 | >20 |
| 4 | 2 | Person | Voice | Value 2 | P |
| 5 | 3 | Mail | OCR | Value 1 | A |
| 6 | 3 | Mail | OCR | Value 2 | I |
| 7 | 4 | Dictation | Understandable | Value 1 | S |
| 8 | 4 | Dictation | Understandable | Value 2 | I |
| 9 | 5 | Web | Logic | Value 1 | R |
| 10 | 5 | Web | Logic | Value 2 | S |
+-------+----------+-----------+----------------+---------------+----------+
Nach meinem Verständnis wird Pivot und Melt die gesamte DisplayLabel-Spalte und nicht nur einige der Werte ausführen.
Jede Hilfe wäre sehr dankbar, da ich den Pandas Melt und den Pandas Pivot sowie einige Referenzen zum Stackoverflow gelesen habe und anscheinend keinen Weg gefunden habe, dies schnell zu tun.
Vielen Dank!
Value 1
unter derLogic
Zeile Test steht?Antworten:
Wir können Ihr Ergebnis erzielen, indem wir Logik anwenden und schwenken. Wir teilen Ihre Daten auf, indem wir prüfen, ob sie
DisplayLabel
enthalten sind,Value
und setzen sie dannjoin
wieder zusammen:Wenn Sie die genaue Spaltenreihenfolge als Beispiel verwenden möchten, verwenden Sie
DataFrame.reindex
:Im Detail - Schritt für Schritt:
quelle
set_index
,unstack
Dannmelt
Benutzerdefinierte Funktion für
groupby
Installieren
quelle
Ich habe einen anderen Ansatz versucht, zuerst zu
pivot
verwendenunstack
und dann teilweise zu konvertierenwide_to_long
(Entschuldigung, wenn es nicht effizient ist, aber dies scheint die gewünschte Ausgabe zu erhalten).quelle