在列中的行(&非|)上搜索一组值

时间:2018-11-24 14:00:55

标签: python dataframe indexing row

我是python的新手,我试图从第一列中找到所有我正在搜索的条目,这些条目在第二列中。例如:我要输入{155,137},我希望从id1列中得到5和6作为回报。

id1  id2
----------
1.    10
2.    10
3.    10
4.    9
5.    137
5.    150
5.    155
6.    10
6.    137
6.    155
....

我在Google上搜索了很多,但无法解决。我是从excel读取这些条目的,我尝试了多个for循环,但是看起来不太好,因为我正在搜索很多条目

我尝试过:

df = pd.read_excel('path/temp.xlsx') #now I have two Columns and many rows

d1 = df.values.T[0].tolist()

d2 = df.values.T[1].tolist()

d1[d2.index(115) & d2.index(187)& d2.index(276) & d2.index(239) & d2.index(200) & d2.index(24) & d2.index(83)] 

返回1

我本周开始工作,所以我很新

3 个答案:

答案 0 :(得分:0)

假设您有两个ID的两个列表(即,一个ID1列表,一个ID2列表),并且这些列表彼此对应(也就是说,列表1中索引i的值对应于list2的索引i处的值。

如果是这种情况,那么您只需要找出要搜索的元素的索引,其他列表中的相应索引将成为您查询的答案。

要获取元素的索引,可以使用Python的内置功能获取索引,即:

list.index(<element>)

它将返回列表中所需元素的从零开始的索引。

要从id1中获取相应的ID,您可以简单地使用此索引(因为一一对应)。就您而言,它可以写为:

id1[id2.index(137)] #it will return 5

注意: index()方法将从列表中返回第一个匹配条目的索引。

答案 1 :(得分:0)

最好用熊猫

import pandas as pd
import numpy as np

随机数据

n = 10
I = [i for i in range(1,7)]
df1 = pd.DataFrame({'Id1': [Id[np.random.randint(len(I))] for i in range(n)],
                    'Id2': np.random.randint(0,1000,n)})

df1.head(5)
   Id1  Id2
0    4  170
1    6  170
2    6  479
3    4  413
4    6   52

使用

查询
df1.loc[~df1.Id2.isin([170,479])].Id1
Out[344]: 
3    4
4    6
5    6
6    3
7    1
8    5
9    6
Name: Id1, dtype: int64

答案 2 :(得分:0)

目前,我已经通过执行此操作解决了

enter image description here