如何找到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
答案 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')