Ich verwende häufig Pandas für Merge (Join) mit einer Bereichsbedingung.Die beste Möglichkeit zum Verbinden/Zusammenführen nach Bereich in Pandas
Zum Beispiel, wenn es 2 Datenrahmen:
A (A_Id, A_value)
B (B_id, B_low, B_high, B_name)
die und von etwa groß sind die gleiche Größe (sagen wir 2M Datensätze).
Ich möchte eine innere Verbindung zwischen A und B machen, also wäre A_value zwischen B_low und B_high.
Verwenden von SQL-Syntax, die sein würde:
SELECT *
FROM A,B
WHERE A_value between B_low and B_high
und das wäre einfach, kurz und effizient. In Pandas ist der einzige Weg (der keine Loops verwendet, die ich gefunden habe), in beiden Tabellen eine Dummy-Spalte zu erstellen, sich daran anzugleichen (was einem Cross-Join entspricht) und dann nicht benötigte Zeilen herauszufiltern. Das klingt schwer und komplex:
A['dummy'] = 1
B['dummy'] = 1
Temp = pd.merge(A,B,on='dummy')
Result = Temp[Temp.A_value.between(Temp.B_low,Temp.B_high)]
Eine andere Lösung, die ich hatte, ist durch die auf jedem von Wert einer Suchfunktion auf B Anwendung von B[(x>=B.B_low) & (x<=B.B_high)]
Maske, aber es auch ineffizient klingt und vielleicht Indexoptimierung erfordern.
Gibt es einen eleganteren und/oder effizienteren Weg, diese Aktion auszuführen?
[Diese Q & A] (https://stackoverflow.com/questions/15581829/how-to-perform-aninner-or-outer-join-of-dataframes-with-pandas-on-non-simplisti) könnte relevant sein. –
sieht aus, als ob sie eine ähnliche Methode zu der von mir vorgeschlagenen verwenden (Pseudospalten, kartesisches Produkt und Maskenfilter). Es ist überraschend, dass es keine integrierte Lösung gibt. – Dimgold
Hast du dir auch die angenommene Antwort angesehen ...? Lernen Sie niemals von _questions_ auf Stack Overflow. Obwohl es vielleicht ist, dass ich nicht realisiere, dass die Antwort das gleiche tut, in welchem Fall sorry :) –