Maison >développement back-end >Tutoriel Python >Comment fusionner efficacement les trames de données Pandas en fonction de la plage de valeurs et de l'identifiant ?

Comment fusionner efficacement les trames de données Pandas en fonction de la plage de valeurs et de l'identifiant ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 11:54:02250parcourir

How to Efficiently Merge Pandas Dataframes Based on Value Range and Identifier?

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 :

  • Exécution plus rapide : SQL est optimisé pour le traitement des données, ce qui le rend plus efficace pour le filtrage basé sur la plage.
  • Évite les données intermédiaires : Les données filtrées sont directement extraites sans créer de grande trame de données intermédiaire.
  • Simplicité : La requête est concise et facile à comprendre.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn