Получение списка индексов, где pandas boolean series - True - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть серия панд с логическими записями. Я хотел бы получить список индексов, где значения True.

Например, ввод pd.Series([True, False, True, True, False, False, False, True])

должно выдать [0,2,3,7].

Я могу сделать это с пониманием списка, но есть ли что-то чище или быстрее?

1 Ответ

0 голосов
/ 04 сентября 2018

Использование Boolean Indexing

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

Если вам нужен объект np.array, получите .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])

Использование встроенного в Python 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]
...