web-dev-qa-db-fra.com

Obtention d'une liste d'indices où pandas série booléenne est True

J'ai une série pandas avec des entrées booléennes. Je voudrais obtenir une liste des indices dont les valeurs sont True.

Par exemple, l'entrée pd.Series([True, False, True, True, False, False, False, True])

devrait donner la sortie [0,2,3,7].

Je peux le faire avec une liste de compréhension, mais y a-t-il quelque chose de plus propre ou plus rapide?

13
James McKeown

En utilisant Boolean Indexing

>>> s = pd.Series([True, False, True, True, False, False, False, True])
>>> s[s].index
Int64Index([0, 2, 3, 7], dtype='int64')

Si besoin d'un np.array objet, récupérez le .values

>>> s[s].index.values
array([0, 2, 3, 7])

En utilisant np.nonzero

>>> np.nonzero(s)
(array([0, 2, 3, 7]),)

En utilisant np.flatnonzero

>>> np.flatnonzero(s)
array([0, 2, 3, 7])

En utilisant np.where

>>> np.where(s)[0]
array([0, 2, 3, 7])

En utilisant np.argwhere

>>> np.argwhere(s).ravel()
array([0, 2, 3, 7])

En utilisant pd.Series.index

>>> s.index[s]
array([0, 2, 3, 7])

Utilisation du python intégré filter

>>> [*filter(s.get, s.index)]
[0, 2, 3, 7]

En utilisant list comprehension

>>> [i for i in s.index if s[I]]
[0, 2, 3, 7]
20
rafaelc