Heim >Backend-Entwicklung >Python-Tutorial >Wie lassen sich Pandas-DataFrames effizient mit Datumsbereichsbedingungen zusammenführen?

Wie lassen sich Pandas-DataFrames effizient mit Datumsbereichsbedingungen zusammenführen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 13:49:021049Durchsuche

How to Efficiently Merge Pandas DataFrames with Date Range Conditions?

Pandas-Datenrahmen mit Datumsbereichsbedingungen zusammenführen

Um zwei Pandas-Datenrahmen zusammenzuführen, bei denen ein Wert zwischen zwei anderen liegt, besteht ein gängiger Ansatz darin, diese zusammenzuführen Datenrahmen bedingungslos nach einem Bezeichner und anschließende Filterung basierend auf der Datumsbedingung. Diese Methode kann jedoch zu Speicherineffizienzen führen.

Eine alternative Lösung, die die Leistungsfähigkeit von SQL nutzt, besteht darin, die Zusammenführung und Filterung innerhalb einer SQL-Abfrage durchzuführen, wie unten gezeigt:

<code class="python">import pandas as pd
import sqlite3

# Create dataframes
presidents = pd.DataFrame({"name": ["Bush", "Obama", "Trump"],
                           "president_id":[43, 44, 45]})
terms = pd.DataFrame({'start_date': pd.date_range('2001-01-20', periods=5, freq='48M'),
                      'end_date': pd.date_range('2005-01-21', periods=5, freq='48M'),
                      'president_id': [43, 43, 44, 44, 45]})
war_declarations = pd.DataFrame({"date": [datetime(2001, 9, 14), datetime(2003, 3, 3)],
                                 "name": ["War in Afghanistan", "Iraq War"]})

# Create an in-memory database
conn = sqlite3.connect(':memory:')

# Write dataframes to database
terms.to_sql('terms', conn, index=False)
presidents.to_sql('presidents', conn, index=False)
war_declarations.to_sql('wars', conn, index=False)

# Execute SQL query to merge and filter dataframes
qry = '''
    select  
        start_date PresTermStart,
        end_date PresTermEnd,
        wars.date WarStart,
        presidents.name Pres
    from
        terms join wars on
        date between start_date and end_date join presidents on
        terms.president_id = presidents.president_id
    '''
df = pd.read_sql_query(qry, conn)

print(df)</code>

Ausgabe:

         PresTermStart          PresTermEnd             WarStart  Pres
0  2001-01-31 00:00:00  2005-01-31 00:00:00  2001-09-14 00:00:00  Bush
1  2001-01-31 00:00:00  2005-01-31 00:00:00  2003-03-03 00:00:00  Bush

Durch die Durchführung der Zusammenführung und Filterung innerhalb von SQL können wir die Erstellung eines potenziell großen Zwischendatenrahmens vermeiden, was zu einer verbesserten Speichereffizienz führt.

Das obige ist der detaillierte Inhalt vonWie lassen sich Pandas-DataFrames effizient mit Datumsbereichsbedingungen zusammenführen?. 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