web-dev-qa-db-fra.com

Pandas: Vérifiez si une ligne existe avec certaines valeurs

J'ai un bidimensionnel (ou plus) pandas DataFrame comme ceci:

>>> import pandas as pd
>>> df = pd.DataFrame([[0,1],[2,3],[4,5]], columns=['A', 'B'])
>>> df
   A  B
0  0  1
1  2  3
2  4  5

Supposons maintenant que j'ai un tableau numpy comme np.array([2,3]) et que je veuille vérifier s'il y a une ligne dans df qui correspond au contenu de mon tableau. Ici, la réponse devrait évidemment être vraie, mais par exemple. np.array([1,2]) doit retourner false car il n'y a pas de ligne avec à la fois 1 dans la colonne A et 2 dans la colonne B.

Bien sûr, c'est facile, mais ne le voyez pas pour le moment.

24
Robin

Il s'avère que c'est vraiment facile, ce qui suit fait le travail ici:

>>> ((df['A'] == 2) & (df['B'] == 3)).any()
True
>>> ((df['A'] == 1) & (df['B'] == 2)).any()
False

Peut-être que quelqu'un propose une meilleure solution qui permet de passer directement dans le tableau et la liste des colonnes à faire correspondre.

Notez que les parenthèses autour de df['A'] == 2 ne sont pas facultatifs car le & L'opérateur est aussi fort que le == opérateur.

42
Robin

un moyen plus simple est:

a = np.array([2,3])
(df == a).all(1).any()
10
acushner

Si vous souhaitez également renvoyer l'index où les correspondances se sont produites:

index_list = df[(df['A'] == 2)&(df['B'] == 3)].index.tolist()
4
sparrow