Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich ein kartesisches Produkt (CROSS JOIN) in Pandas effizient durchführen?

Wie kann ich ein kartesisches Produkt (CROSS JOIN) in Pandas effizient durchführen?

Susan Sarandon
Freigeben: 2024-12-09 04:07:13
Original
802 Leute haben es durchsucht

How Can I Efficiently Perform a Cartesian Product (CROSS JOIN) in Pandas?

Effizientes kartesisches Produkt (CROSS JOIN) in Pandas

Einführung:

Kartesisches Produkt, Auch bekannt als CROSS JOIN, ist eine grundlegende Operation in der Datenanalyse. Bei Pandas geht es darum, jede Zeile eines DataFrames mit jeder Zeile eines anderen zu kombinieren. Obwohl es einfach zu verstehen ist, kann die direkte Berechnung des kartesischen Produkts rechenintensiv sein, insbesondere bei großen Datensätzen.

Best Practices:

1. Die „Schlüssel“-Spaltenmethode:

Dieser Ansatz eignet sich gut für kleine bis mittelgroße Datensätze:

def cartesian_product_key(left, right):
    return left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1)
Nach dem Login kopieren

2. NumPy-basierte Lösungen:

Für größere Datensätze bieten NumPy-basierte Lösungen eine bessere Leistung:

import numpy as np

def cartesian_product(arrays):
    la = len(arrays)
    dtype = np.result_type(*arrays)
    arr = np.empty([len(a) for a in arrays] + [la], dtype=dtype)
    for i, a in enumerate(np.ix_(*arrays)):
        arr[...,i] = a
    return arr.reshape(-1, la)  
Nach dem Login kopieren

3. Generalisierter CROSS JOIN für eindeutige und nicht eindeutige Indizes:

Diese Methode kann DataFrames mit jeder Art von Index verarbeiten:

def cartesian_product_generalized(left, right):
    la, lb = len(left), len(right)
    idx = cartesian_product(np.ogrid[:la], np.ogrid[:lb])
    return pd.DataFrame(
        np.column_stack([left.values[idx[:,0]], right.values[idx[:,1]]]))
Nach dem Login kopieren

4. Multi-DataFrame CROSS JOIN:

Dies erweitert den vorherigen Ansatz, um mehrere DataFrames zu verarbeiten:

def cartesian_product_multi(*dfs):
    idx = cartesian_product(*[np.ogrid[:len(df)] for df in dfs])
    return pd.DataFrame(
        np.column_stack([df.values[idx[:,i]] for i,df in enumerate(dfs)]))
Nach dem Login kopieren

5. Vereinfachter CROSS JOIN für zwei DataFrames:

Diese Methode, die fast so schnell ist wie das kartesische_Produkt von @senderle, ist besonders effektiv für zwei DataFrames:

def cartesian_product_simplified(left, right):
    la, lb = len(left), len(right)
    ia2, ib2 = np.broadcast_arrays(*np.ogrid[:la,:lb])

    return pd.DataFrame(
        np.column_stack([left.values[ia2.ravel()], right.values[ib2.ravel()]]))
Nach dem Login kopieren

Leistungsvergleich :

Das Benchmarking dieser Methoden bei unterschiedlichen Datensatzgrößen zeigt, dass die NumPy-basierte Lösungen übertreffen die anderen bei großen Datensätzen durchweg.

Fazit:

Die Wahl der richtigen Methode zur Berechnung des kartesischen Produkts in Pandas hängt von der Größe und den Eigenschaften von ab Ihre Datensätze. Wenn Leistung Priorität hat, entscheiden Sie sich für eine der NumPy-basierten Lösungen. Erwägen Sie aus Bequemlichkeits- und Flexibilitätsgründen die „Schlüssel“-Spaltenmethode oder den verallgemeinerten CROSS JOIN.

Das obige ist der detaillierte Inhalt vonWie kann ich ein kartesisches Produkt (CROSS JOIN) in Pandas effizient durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage