2 votes

Valider que les lignes d'un cadre de données Pandas sont égales entre les valeurs des colonnes.

Disons que j'ai un DataFrame pandas comme ci-dessous :

   C30    C25    C20    C15    C10
1  AJA    EJE    IJI    OJO    UJU
2  AJA    EJE    IJI    OJO    UJU
3  AJA    EJE    IJI    OJO    UJU
4  ABA    EBE    IBI    OBO    UBU
5  ABA    EBE    IBI    OBO    UBU
6  ABA    EBE    IBI    OBO    UNU
7  BOB    BIB    BEB    BAB    BUB

Je voudrais valider toutes les lignes qui ont des valeurs égales en C30 ont aussi des valeurs égales en C25, C20, C15 et C10.

J'ai environ 60 000 lignes avec beaucoup de variations dans les valeurs des colonnes. Si les éléments de la colonne C30 sont égaux, les éléments correspondants de la colonne C25 devraient également être égaux, et ainsi de suite.

Dans l'exemple, la validation devrait montrer une non-concordance car la valeur C10 de la ligne 6 n'est pas égale aux lignes 4 et 5. Quelle est la manière la plus efficace de faire cela ?

1voto

jezrael Points 290608

Vous pouvez utiliser DataFrameGroupBy.nunique et comparer pour non égal 1 por DataFrame.ne :

m = df.groupby('C30').nunique().ne(1)
print (m)
       C25    C20    C15    C10
C30                            
ABA  False  False  False   True
AJA  False  False  False  False
BOB  False  False  False  False

Et ensuite, si des valeurs sont nécessaires, si elles ne correspondent pas, utiliser np.where :

i, c  = np.where(m)

L = list(zip(m.index[i], m.columns[c]))

if len(L) > 0:
    print ('mismatch')
    print (L)
mismatch
[('ABA', 'C10')]

1voto

Vishnudev Points 1702

Utilisez DataFrame.duplicated pour trouver les lignes qui ne sont pas uniques.

df['is_dup'] = df.duplicated(keep=False)

Sortie

   C30  C25  C20  C15  C10  is_dup
1  AJA  EJE  IJI  OJO  UJU    True
2  AJA  EJE  IJI  OJO  UJU    True
3  AJA  EJE  IJI  OJO  UJU    True
4  ABA  EBE  IBI  OBO  UBU    True
5  ABA  EBE  IBI  OBO  UBU    True
6  ABA  EBE  IBI  OBO  UNU   False
7  BOB  BIB  BEB  BAB  BUB   False

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