Comment puis-je trouver efficacement les différences entre deux DataFrames Pandas ?

Barbara Streisand
Libérer: 2024-11-25 20:21:12
original
565 Les gens l'ont consulté

How Can I Efficiently Find the Differences Between Two Pandas DataFrames?

Trouver les différences entre deux trames de données

Lorsque vous travaillez avec des trames de données Pandas, il est courant d'avoir des situations où vous devez comparer deux trames de données et extraire les différences entre eux. Par exemple, vous pouvez avoir un bloc de données de base (df1) et un bloc de données de sous-ensemble (df2) et souhaiter créer un nouveau bloc de données (df3) contenant toutes les lignes et colonnes de df1 qui ne sont pas présentes dans df2.

Utiliser drop_duplicates

La méthode la plus directe pour y parvenir est d'utiliser le fonction drop_duplicates. En concaténant df1 et df2, puis en appliquant drop_duplicates au bloc de données concaténé, vous pouvez éliminer les lignes en double et obtenir un bloc de données contenant uniquement des lignes uniques.

pd.concat([df1, df2]).drop_duplicates(keep=False)
Copier après la connexion

Gestion des doublons

Cependant, si df1 ou df2 lui-même contient des lignes en double, l'approche drop_duplicates peut entraîner une sortie erronée. Pour résoudre ce problème, vous pouvez utiliser des méthodes alternatives qui préservent les doublons originaux :

Méthode 1 : Utiliser isin avec tuple

Cette méthode consiste à convertir chaque ligne des blocs de données en un tuple et vérifier si les tuples sont présents dans les deux trames de données. Les lignes qui ne correspondent à aucun tuple dans l'autre bloc de données seront incluses dans le bloc de données de différence.

df1[~df1.apply(tuple, 1).isin(df2.apply(tuple, 1))]
Copier après la connexion

Méthode 2 : Fusionner avec l'indicateur

Un autre L’approche consiste à fusionner df1 et df2 à l’aide d’une colonne indicatrice. En spécifiant how='left' dans la fusion, les lignes de df1 qui n'ont pas de lignes correspondantes dans df2 se verront attribuer une valeur de colonne _merge de left_only. Vous pouvez ensuite filtrer les lignes en fonction de cette colonne d'indicateur pour obtenir le bloc de données de différence.

df1.merge(df2, indicator=True, how='left').loc[lambda x: x['_merge'] != 'both']
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal