Ich versuche, eine linke Verbindung zwischen zwei Datenrahmen in Deedle zu tun. Beispiele für die zwei Datenrahmen sind unter:Wie mache ich einen linken Join auf eine nicht eindeutige Spalte/Index in Deedle
let workOrders =
Frame.ofColumns [
"workOrderCode" =?> series [ (20050,20050); (20051,20051); (20060,20060) ]
"workOrderDescription" =?> series [ (20050,"Door Repair"); (20051,"Lift Replacement"); (20060,"Window Cleaning") ]]
// This does not compile due to the duplicate Work Order Codes
let workOrderScores =
Frame.ofColumns [
"workOrderCode" => series [ (20050,20050); (20050,20050); (20051,20051) ]
"runTime" => series [ (20050,20100112); (20050,20100130); (20051,20100215) ]
"score" => series [ (20050,100); (20050,120); (20051,80) ]]
Frame.join JoinKind.Outer workOrders workOrderScores
Das Problem ist, dass Deedle läßt mich nicht einen Datenrahmen mit einem nicht eindeutigen Index erstellen und ich erhalte die folgende Fehlermeldung: System.ArgumentException: Doppelter Schlüssel ‚20050‘ . Doppelte Schlüssel sind im Index nicht erlaubt.
Interessanterweise in Python/Pandas kann ich Folgendes tun, was perfekt funktioniert. Wie kann ich dieses Ergebnis in Deedle reproduzieren? Ich denke, dass ich den zweiten Datenrahmen abflachen muss, um die Duplikate zu entfernen, dann beitreten und dann wieder aufheben/entstapeln?
workOrders = pd.DataFrame(
{'workOrderCode': [20050, 20051, 20060],
'workOrderDescription': ['Door Repair', 'Lift Replacement', 'Window Cleaning']})
workOrderScores = pd.DataFrame(
{'workOrderCode': [20050, 20050, 20051],
'runTime': [20100112, 20100130, 20100215],
'score' : [100, 120, 80]})
pd.merge(workOrders, workOrderScores, on = 'workOrderCode', how = 'left')
# Result:
# workOrderCode workOrderDescription runTime score
#0 20050 Door Repair 20100112 100
#1 20050 Door Repair 20100130 120
#2 20051 Lift Replacement 20100215 80
#3 20060 Window Cleaning NaN NaN
Danke für die Antwort. Es scheint nicht zu kompilieren, da ein Match-Case fehlt. Ich fügte den Fall hinzu "| _, _ -> frame [])" und das scheint es behoben zu haben, aber wie du gesagt hast, ist die Leistung nicht sehr gut. – jeremyh
@jeremyh Das sollte nur eine Warnung sein (die Sie ignorieren können, weil Sie auf beiden Seiten niemals Werte verlieren werden). Aber Ihre Lösung ist eine großartige Möglichkeit, die Warnung zu vermeiden (und ich würde das gleiche im Produktionscode tun, um sicherzustellen, dass ich keine unerklärlichen Warnungen mehr habe!) –
Oh ja, Sie sind richtig auf die Warnung. Wenn ich einen größeren Datensatz einspeise, kommt die Warnung sofort zurück, während die Ergebnisse verzögert werden. Ich dachte, es würde die Ergebnisse stoppen, aber es lief immer noch im Hintergrund. Ich werde dafür ein Problem auf GitHub hinzufügen. – jeremyh