2 votes

Pandas : Suppression des lignes correspondantes dans 2+ DataFrames

J'ai 2 DataFrames :

dfA:      dfB:
    n1         n2
a - AA    01 - 0
b - BB    02 - 0
c - CC    03 - 0
d - DD    04 - 1
e - EE    05 - 2
f - FF    06 - 0

Le nombre de lignes dans dfA et dfB est toujours égal.

Maintenant, je supprime toutes les lignes avec 0 valeurs de dfB by :

dfB = dfB[dfB['n2']!=0]

(Il est très probable que les lignes 0 n'apparaissent qu'en haut ou (en haut et en bas) des DataFrames).

Comment supprimer les lignes correspondantes de dfA ?

2voto

Landmaster Points 303

Vous pouvez extraire la valeur de l'index en utilisant get_indexer_for, qui renvoie une liste d'emplacements d'index (par opposition aux valeurs d'index).

dfB.index.get_indexer_for(dfB[dfB['n2'] != 0].index)

Vous pouvez ensuite les utiliser pour abaisser les valeurs correspondantes dans dfA de la manière suivante

dfA.drop(dfa.index[dfB.index.get_indexer_for(dfB[dfB['n2'] != 0].index)])

Veillez à réaffecter le df car cette opération ne modifie pas la base de données existante. Elle n'en fait qu'une copie.

2voto

piRSquared Points 159

Utilisation dfB pour créer un tableau booléen. Il est ensuite utilisé comme masque pour les deux cadres de données.

m = dfB.n2.eq(0).values

dfB = dfB[m]
dfA = dfA[m]

Débogage
Copier/Coller

dfB = pd.DataFrame(dict(n2=[0, 0, 0, 1, 2, 0]), '01 02 03 04 05 06'.split())

m = dfB.n2.eq(0).values

dfB[m]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X