获取有条件的索引

时间:2018-01-18 08:00:27

标签: python python-3.x pandas numpy

如何找到search_value的所有条目的位置(索引)?

number

输出:

import pandas as pd
import numpy as np
search_value=8
lst=[5, 8, 2, 7, 8, 8, 2, 4]
df=pd.DataFrame(lst)
df["is_search_value"]=np.where(df[0]==search_value, True, False)
print(df.head(20))

理想的输出:

   0  is_search_value
0  5            False
1  8             True
2  2            False
3  7            False
4  8             True
5  8             True
6  2            False
7  4            False

如果search_value为10而非理想输出:

1 4 5

3 个答案:

答案 0 :(得分:2)

您可以在条件列表推导中使用枚举来获取索引位置。

my_list = [5, 8, 2, 7, 8, 8, 2, 4]
search_value = 8
>>> [i for i, n in enumerate(my_list) if n == search_value]
[1, 4, 5]

如果搜索值不在列表中,那么将返回一个空列表(不完全是None,但仍然是假的)。

使用pandas,您可以使用布尔索引来获取匹配项,然后将索引提取到列表中:

df[df[0] == search_value].index.tolist()

使用空列表将满足None的条件(它们都计算为False)。如果确实需要None,请使用@cᴏʟᴅsᴘᴇᴇᴅ的建议。

答案 1 :(得分:1)

使用pandas

>>> (pd.Series([5, 8, 2, 7, 8, 8, 2, 4]) == 8).nonzero()
(array([1, 4, 5], dtype=int64),)

答案 2 :(得分:1)

如果你只传递np.where()条件 - 它将返回匹配元素的索引:

In [29]: np.where(df[0]==search_value)
Out[29]: (array([1, 4, 5], dtype=int64),)

对于自定义Pandas索引:

In [39]: df = pd.DataFrame(lst, index=np.arange(8)[::-1])

In [40]: df
Out[40]:
   0
7  5
6  8
5  2
4  7
3  8
2  8
1  2
0  4

In [41]: df.index[np.where(df[0]==search_value)]
Out[41]: Int64Index([6, 3, 2], dtype='int64')