Fusion de deux cadres de données Pandas en fonction d'un identifiant et d'une condition où une date dans un cadre de données se situe dans une plage de dates dans l’autre trame de données peut être un défi. La question se pose s'il existe un moyen plus efficace d'effectuer cette opération plutôt que l'approche suggérée consistant à fusionner inconditionnellement suivie d'un filtrage par date.
Comme indiqué dans la question , cette tâche est triviale dans SQL en raison de la disponibilité de fonctionnalités de filtrage de dates intégrées. Cependant, obtenir le même résultat dans pandas peut nécessiter un processus en deux étapes, comme décrit dans la question.
L'amélioration suggérée implique d'exploiter la puissance de SQL même dans un environnement Python. . Voici comment procéder :
<code class="python">import pandas as pd import sqlite3 # Convert the pandas dataframes into temporary SQL tables conn = sqlite3.connect(':memory:') df1.to_sql('table_a', conn, index=False) df2.to_sql('table_b', conn, index=False) # Construct an SQL query that performs the merge and date filtering in one operation query = """ SELECT * FROM table_a AS a JOIN table_b AS b ON a.id = b.id WHERE a.date BETWEEN b.min_date AND b.max_date; """ # Execute the query and retrieve the merged dataframe merged_df = pd.read_sql_query(query, conn)</code>
Cette approche permet un filtrage efficace au sein de la fusion, évitant ainsi la création d'une trame de données intermédiaire potentiellement volumineuse.
Alors que le L'approche de fusion inconditionnelle suivie d'une approche de filtrage est fonctionnelle, la solution améliorée présentée ici offre une efficacité et des performances améliorées en utilisant les capacités de filtrage de date intégrées de SQL dans un environnement Python.
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!