Fusionner les trames de données Pandas en fonction de la plage de valeurs et de l'identifiant
Dans les pandas, la fusion des trames de données à l'aide d'une condition basée sur une plage et d'un identifiant peut être obtenue grâce à une combinaison d’opérations de fusion et de filtrage. Cependant, cette approche peut s’avérer inefficace lorsque l’on travaille avec de grands ensembles de données. Une approche alternative qui exploite SQL pourrait offrir de meilleures performances.
Considérons un exemple où nous avons deux dataframes, A et B. La Dataframe A contient une date (fdate) et un identifiant (cusip), tandis que la Dataframe B inclut dates (namedt et nameenddt) et le même identifiant (ncusip). Notre objectif est de fusionner ces dataframes où la date fdate dans A se situe dans la plage de dates définie par nommée et nomenddt dans B.
Le code Python suivant illustre l'approche traditionnelle des pandas :
<code class="python">df = pd.merge(A, B, how='inner', left_on='cusip', right_on='ncusip') df = df[(df['fdate']>=df['namedt']) & (df['fdate']<=df['nameenddt'])]</code>
Bien que cette approche fonctionne, elle implique la fusion inconditionnelle des trames de données, puis un filtrage en fonction de la condition de date, ce qui peut être coûteux en termes de calcul pour les grands ensembles de données.
Une approche alternative consiste à utiliser une requête SQL :
<code class="python">import pandas as pd import sqlite3 # Create a temporary database in memory conn = sqlite3.connect(':memory:') # Write the dataframes to tables A.to_sql('table_a', conn, index=False) B.to_sql('table_b', conn, index=False) # Construct the SQL query query = ''' SELECT * FROM table_a JOIN table_b ON table_a.cusip = table_b.ncusip WHERE table_a.fdate BETWEEN table_b.namedt AND table_b.nameenddt ''' # Execute the query and create a Pandas dataframe df = pd.read_sql_query(query, conn)</code>
Cette approche présente plusieurs avantages :
En conclusion, tirer parti de SQL pour fusionner des trames de données en fonction de conditions et d'identifiants basés sur des plages offre des avantages en termes de performances par rapport aux opérations Pandas traditionnelles, en particulier pour les ensembles de données plus volumineux.
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!