Maison > Article > développement back-end > Comment fusionner efficacement les DataFrames Pandas avec des conditions de plage de dates ?
Fusion de trames de données Pandas avec des conditions de plage de dates
Pour fusionner deux trames de données Pandas où une valeur se situe entre deux autres, une approche courante consiste à fusionner les trames de données sans condition sur un identifiant et filtrage ultérieur en fonction de la condition de date. Cependant, cette méthode peut entraîner des inefficacités de mémoire.
Une solution alternative qui exploite la puissance de SQL consiste à effectuer la fusion et le filtrage au sein d'une requête SQL, comme illustré ci-dessous :
<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>
Résultat :
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
En effectuant la fusion et le filtrage dans SQL, nous pouvons éviter de créer une trame de données intermédiaire potentiellement volumineuse, ce qui améliore l'efficacité de la mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!