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?
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])
np.nonzero
>>> np.nonzero(s)
(array([0, 2, 3, 7]),)
np.flatnonzero
>>> np.flatnonzero(s)
array([0, 2, 3, 7])
np.where
>>> np.where(s)[0]
array([0, 2, 3, 7])
np.argwhere
>>> np.argwhere(s).ravel()
array([0, 2, 3, 7])
pd.Series.index
>>> s.index[s]
array([0, 2, 3, 7])
filter
>>> [*filter(s.get, s.index)]
[0, 2, 3, 7]
list comprehension
>>> [i for i in s.index if s[I]]
[0, 2, 3, 7]