获取pandas布尔系列为True的索引列表

问题描述 投票:5回答:1

我有一个带有布尔条目的熊猫系列。我想获得一个值为True的索引列表。

例如输入pd.Series([True, False, True, True, False, False, False, True])

应该产生输出[0,2,3,7]

我可以用列表理解来做到这一点,但有更清洁或更快的东西吗?

python pandas series
1个回答
11
投票

Using 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])

Using np.nonzero

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

Using np.flatnonzero

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

Using np.where

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

Using np.argwhere

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

Using pd.Series.index

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

Using python's built-in filter

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

Using list comprehension

>>> [i for i in s.index if s[I]]
[0, 2, 3, 7]
© www.soinside.com 2019 - 2024. All rights reserved.