Daten
Ich habe ein Datenframe, das 5 Spalten enthält:
origin_lat
, origin_lng
) dest_lat
, dest_lng
) Ich habe eine Matrix M
, die Paare von Ursprung und Ziel Breite / Länge enthält. Einige dieser Paare existieren im Datenrahmen, andere nicht.
Ziel
Mein Ziel ist zweifach:
M
, die in den ersten vier Spalten des Datenrahmens nicht vorhanden sind, wenden Sie eine Funktion func
auf sie an (um die Score-Spalte zu berechnen) und hängen Sie die Ergebnisse an den vorhandenen Datenrahmen an. Hinweis: Wir sollten die Bewertung für bereits vorhandene Zeilen nicht neu berechnen. M
in einem neuen Datenrahmen dfs
. Beispielcode
%Vor% Was mir einen Datenrahmen df
so gibt:
Ich kann dann künstlich die Auswahlmatrix M
erstellen, die 3 Zeilen enthält, die im Datenrahmen vorhanden sind, und 3 Zeilen, die dies nicht tun.
Die Matrix M
sieht folgendermaßen aus:
Von hier aus kann ich nicht wissen, welche Zeilen von M
nicht in df
vorhanden sind, und füge sie hinzu. Ich weiß auch nicht, wie man alle Zeilen von df
in M
auswählt.
Ideen
Meine Idee war, die fehlenden Zeilen zu identifizieren, sie an df
mit einem nan
score anzuhängen und den Score nur für die nan
Zeilen neu zu berechnen. Ich weiß jedoch nicht, wie ich diese Zeilen effizient auswählen kann, ohne jedes Element der Matrix M
zu durchlaufen.
Irgendwelche Vorschläge? Vielen Dank für Ihre Hilfe!
Also wird diese Lösung jede Zeile in M, aber nicht jedes Element durchlaufen. Die Schritte sind:
Hoffentlich hilft das - ich weiß, dass es immer noch eine Schleife hat, aber ich habe nicht herausgefunden, wie ich es loswerden kann. Ihre Frage besagt auch nur, dass df groß sein könnte, und dass Sie Schleifenelemente von M vermeiden wollten, was dies zumindest dadurch vermeidet, dass nur Zeilen durchgeschleift werden.
%Vor% Konvertiere M
in ein DataFrame
, concat mit df
:
Löschen Sie die doppelten Zeilen nur basierend auf den Spalten in geocols
:
Erhalte eine Maske von Zeilen mit NaN
für score
:
Übernehmen Sie die Punkte für die maskierten Zeilen und speichern Sie sie in df3
:
Sie erhalten ein SettingWithCopyWarning, aber es funktioniert.
Sie machen geospatiale Analysen, ich denke, es ist sehr wichtig, einige Standardansätze zu integrieren. Jede Zeile / Ihr Eintrag wird nämlich durch ein Koordinatenpaar identifiziert, um sie in WKT zu konvertieren. würde viel Sinn machen.
Bei WKT müssen Sie nur überprüfen, ob der WKT der neuen Daten bereits in den alten Daten gefunden wurde:
%Vor%Zusätzliche Kommentare:
score
-Spalte zu berechnen (falls solche Berechnungen erforderlich sind) precision
bis 6) df
(oder df.append(df2)
part) ändert sich jedes Mal, wenn Sie neue Zeilen aus einem neuen Datenrahmen hinzufügen, in diesem Fall df2
. Inhärent bedeutet dies, dass die Leistung surfer wird, wenn solche Aktualisierungen sehr häufig auftreten. Lassen Sie uns zuerst M als einen Datenrahmen namens df_temp:
formen %Vor%Mit merge können wir jetzt leicht die Elemente in df verfolgen, die in M waren:
%Vor%Hinweis : Das right_index-Argument ermöglicht es uns, die Indexierung von df beizubehalten, so dass wir wissen, welche Zeilen von df auch in M
warenSchließlich können wir Zeilen in df_temp hinzufügen, die nicht in df:
waren %Vor%Hinweis: Die Untergruppe in drop_duplicates befindet sich nur hier, weil Ihre Bewertungsfunktion nichtdeterministisch ist