Maison >développement back-end >Tutoriel Python >Comment identifier les lignes présentes dans un DataFrame Pandas mais pas dans un autre ?

Comment identifier les lignes présentes dans un DataFrame Pandas mais pas dans un autre ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 10:45:44318parcourir

How to Identify Rows Present in One Pandas DataFrame but Not Another?

Identification des lignes inhabituelles dans les DataFrames Pandas

Lorsque vous travaillez avec plusieurs blocs de données, il devient nécessaire d'identifier les lignes qui existent dans l'une mais pas dans l'autre. Supposons que nous ayons deux trames de données, df1 et df2, où df2 est un sous-ensemble de df1.

Comment pouvons-nous extraire les lignes de df1 qui ne sont pas présentes dans df2 ?

Considérons l'exemple suivant :

import pandas as pd

df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5, 3], 'col2': [10, 11, 12, 13, 14, 10]})
df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})

print("df1:")
print(df1)

print("\ndf2:")
print(df2)

Sortie :

   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14
5     3    10

   col1  col2
0     1    10
1     2    11
2     3    12

Notre objectif est de trouver les lignes de df1 qui ne sont pas présentes dans df2.

Solution :

Pour identifier avec précision les lignes inhabituelles, nous devons effectuer une jointure gauche entre df1 et df2 sur les colonnes col1 et col2, en nous assurant que les doublons dans df2 sont éliminés. De plus, nous spécifions Indicator=True pour créer une colonne supplémentaire indiquant la source de chaque ligne fusionnée.

Le bloc de données résultant, df_all, contient toutes les lignes de df1 et df2 avec une colonne supplémentaire _merge qui indique si un la ligne provient des deux blocs de données (les deux), uniquement df1 (left_only) ou uniquement df2 (right_only).

df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)

Nous pouvons maintenant filtrer df_all pour extraire les lignes inhabituelles de df1 en utilisant la condition booléenne df_all['_merge'] == 'left_only'.

df_uncommon = df_all[df_all['_merge'] == 'left_only']
print("\nUncommon rows in df1:")
print(df_uncommon)

Cela renverra le résultat souhaité :

   col1  col2 _merge
3     4    13  left_only
4     5    14  left_only
5     3    10  left_only

By en tirant parti de la jointure gauche avec élimination des doublons et de la colonne _merge, nous pouvons identifier et extraire efficacement les lignes de df1 qui ne sont pas présentes dans df2.

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