Die beste Möglichkeit, um nach Bereich in Pandas [Duplikat]

8

Ich verwende häufig Pandas für die Zusammenführung (Join), indem ich eine Bereichsbedingung verwende.

Zum Beispiel, wenn es 2 Datenrahmen gibt:

A (A_id, A_value)

B (B_id, B_low, B_high, B_name)

die groß sind und ungefähr die gleiche Größe haben (sagen wir mal 2M Datensätze).

Ich würde gerne eine innere Verbindung zwischen A und B machen, also wäre A_value zwischen B_low und B_high.

Mit SQL-Syntax wäre das:

%Vor%

und das wäre wirklich 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 anzuschließen (entspricht einem Cross-Join) und dann nicht benötigte Zeilen herauszufiltern. Das klingt schwer und komplex:

%Vor%

Eine andere Lösung, die ich hatte, besteht darin, auf jeden A-Wert eine Suchfunktion auf B anzuwenden, indem% code% mask verwendet wird, aber es klingt auch ineffizient und könnte eine Indexoptimierung erfordern.

Gibt es eine elegantere und / oder effizientere Möglichkeit, diese Aktion auszuführen?

    
Dimgold 05.06.2017, 11:12
quelle

5 Antworten

5

Einrichtung
Betrachten Sie die Datenrahmen A und B

%Vor%

numpy
Der ✌easiesty Weg besteht darin, numpy broadcasting zu verwenden.
Wir suchen nach jeder Instanz von A_value , die größer oder gleich B_low ist, während gleichzeitig A_value kleiner oder gleich B_high ist.

%Vor%
piRSquared 17.06.2017, 05:28
quelle
1

Ich weiß nicht, wie effizient es ist, aber jemand hat einen Wrapper geschrieben, der es Ihnen ermöglicht, die SQL-Syntax mit Pandas-Objekten zu verwenden. Das nennt man pandasql . Die Dokumentation besagt explizit, dass Joins unterstützt werden. Dies könnte zumindest einfacher zu lesen sein, da die SQL-Syntax sehr gut lesbar ist.

    
baloo 17.06.2017 08:52
quelle
0

Nicht sicher, dass das effizienter ist, aber Sie können sql direkt (z. B. aus dem Modul sqlite3) mit Pandas verwenden (inspiriert von dies Frage ) wie:

%Vor%

Sie können die Abfrage bei Bedarf in Ihrer Anwendung anpassen

    
Adonis 13.06.2017 21:44
quelle
0

lässt ein einfaches Beispiel folgen:

%Vor%

gibt

zurück %Vor%

lässt nun einen zweiten Datenrahmen definieren

%Vor%

führt zu

%Vor%

hier gehen wir; und wir wollen, dass die Ausgabe der Index 3 und A der Wert 5

ist %Vor%

führt zu

%Vor%     
suvy 14.06.2017 16:48
quelle
0

Bedenken Sie, dass Ihr A-Datenrahmen

ist %Vor%

und B Datenrahmen ist

%Vor%

Mit diesem Befehl erhalten Sie die gewünschte Ausgabe

%Vor%     
Akshay Kandul 15.06.2017 09:00
quelle

Tags und Links