Heim  >  Artikel  >  Backend-Entwicklung  >  Wie füge ich DataFrames nach Bereichsbedingung in Pandas mithilfe von Numpy Broadcasting zusammen?

Wie füge ich DataFrames nach Bereichsbedingung in Pandas mithilfe von Numpy Broadcasting zusammen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 09:33:01192Durchsuche

How to Merge DataFrames by Range Condition in Pandas Using Numpy Broadcasting?

Datenrahmen nach Bereichsbedingung in Pandas zusammenführen

Im Bereich der Datenanalyse ist das Kombinieren von Daten aus mehreren Quellen eine häufige Aufgabe. Pandas, eine leistungsstarke Python-Bibliothek zur Datenbearbeitung, bietet verschiedene Methoden zum Zusammenführen von Datenrahmen, einschließlich einer Bereichsbedingung. Dieser Artikel befasst sich mit diesem speziellen Szenario und stellt eine effiziente Lösung mithilfe von Numpy Broadcasting vor.

Problembeschreibung

Bei zwei Datenrahmen, A und B, besteht das Ziel darin, eine durchzuführen Innerer Join, bei dem Werte in Datenrahmen A in einen bestimmten Bereich fallen, der in Datenrahmen B definiert ist. Traditionell würde dies mithilfe der SQL-Syntax erreicht werden:

<code class="sql">SELECT *
FROM A, B
WHERE A_value BETWEEN B_low AND B_high</code>

Vorhandene Lösungen

Pandas bietet eine Problemumgehung mithilfe von Dummy-Spalten, dem Zusammenführen in der Dummy-Spalte und dem anschließenden Herausfiltern nicht benötigter Zeilen. Allerdings ist diese Methode rechenintensiv. Alternativ könnte man eine Suchfunktion für jeden A-Wert auf B anwenden, aber dieser Ansatz hat auch Nachteile.

Numpy Broadcasting: Ein pragmatischer Ansatz

Numpy Broadcasting bietet eine elegante und effiziente Lösung. Diese Technik nutzt die Vektorisierung, um Berechnungen für ganze Arrays statt für einzelne Elemente durchzuführen. So erreichen Sie die gewünschte Zusammenführung:

  1. Extrahieren Sie Werte aus den Datenrahmen A und B.
  2. Verwenden Sie Numpy Broadcasting, um eine boolesche Maske zu erstellen:

    • A_value >= B_low
    • A_value <= B_high
  3. Verwenden Sie Numpys np.where, um die Indizes zu finden, bei denen die Maske True ist.
  4. Verketten die entsprechenden Zeilen aus den Datenrahmen A und B basierend auf den identifizierten Indizes.

Dieser Ansatz nutzt Broadcasting, um den Bereichsvergleich für den gesamten A-Datenrahmen durchzuführen, wodurch die Berechnungszeit und -komplexität erheblich reduziert wird.

Beispiel

Betrachten Sie die folgenden Datenrahmen:

<code class="python">A = pd.DataFrame(dict(
    A_id=range(10),
    A_value=range(5, 105, 10)
))
B = pd.DataFrame(dict(
    B_id=range(5),
    B_low=[0, 30, 30, 46, 84],
    B_high=[10, 40, 50, 54, 84]
))</code>

Ausgabe:

   A_id  A_value  B_high  B_id  B_low
0     0        5      10     0      0
1     3       35      40     1     30
2     3       35      50     2     30
3     4       45      50     2     30

Diese Ausgabe zeigt den Erfolg Zusammenführen der Datenrahmen A und B basierend auf der angegebenen Bereichsbedingung.

Zusätzliche Überlegungen

Um eine Linksverknüpfung durchzuführen, schließen Sie die nicht übereinstimmenden Zeilen aus Datenrahmen A in die Ausgabe ein. Dies kann erreicht werden, indem numpys ~np.in1d ​​verwendet wird, um die nicht übereinstimmenden Zeilen zu identifizieren und sie an das Ergebnis anzuhängen.

Zusammenfassend lässt sich sagen, dass Numpy Broadcasting einen robusten und effizienten Ansatz zum Zusammenführen von Datenrahmen basierend auf Bereichsbedingungen bietet. Seine Vektorisierungsfunktionen verbessern die Leistung und machen es zu einer idealen Lösung für große Datensätze.

Das obige ist der detaillierte Inhalt vonWie füge ich DataFrames nach Bereichsbedingung in Pandas mithilfe von Numpy Broadcasting zusammen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn