Python:基于多个动态列值筛选数据帧行

Python:基于多个动态列值筛选数据帧行,python,pandas,Python,Pandas,我试图根据列值列表筛选数据帧中的行。问题是,我动态地输入了列的长度,到目前为止我已经尝试过了,但这不符合我的目的 >>>df a b 0 jdfb sdvkb 如果我必须同时搜索两列。也就是说,如果a='jdfb'和b='sdvkb'那么我需要返回1 我将动态创建的搜索列存储在一个列表变量字段中,而值也存储在另一个列表变量“matchlist”中 fields = ['a','b'] matchlist = ['jdfb','sdvkb'] 方法1我尝

我试图根据列值列表筛选数据帧中的行。问题是,我动态地输入了列的长度,到目前为止我已经尝试过了,但这不符合我的目的

>>>df
    a      b
0  jdfb  sdvkb
如果我必须同时搜索两列。也就是说,如果
a='jdfb'
b='sdvkb'
那么我需要返回1

我将动态创建的搜索列存储在一个列表变量
字段中
,而值也存储在另一个列表变量“matchlist”中

fields = ['a','b']
matchlist = ['jdfb','sdvkb']
方法1我尝试了这个方法,效果很好:

>>> df[fields].isin(matchlist)
    a     b
0  True  True
这很好。这正是我想要的。但当我尝试下一个查询时,这不是我想要的,因为它不应该工作:

>>> df[fields].isin(matchlist)
    a     b
0  True  True

这种方法的问题在于,列应该按照方法1中指定的顺序匹配,而不是按照我尝试的下一种方式匹配。有什么方法可以做到这一点吗?

生成两个单独的布尔索引并将它们组合起来可能更容易

>>> import pandas as pd
>>> 
>>> #create the mapping of desirable values
... desirable = ['a','b']
>>> 
>>> #create data where some rows match the conditions
... data = [desirable,desirable[::-1],desirable, desirable, desirable[::-1]]
>>> df = pd.DataFrame(data, columns = ['first','second'])
>>> 
>>> #Rows 0, 2, and 3 match our conditions
... df
  first second
0     a      b
1     b      a
2     a      b
3     a      b
4     b      a
>>> 
>>> #create a boolean mask for rows that match our conditions
... conditions = (df['first'] == desirable[0]) & (df['second'] == desirable[1])
>>> 
>>> #we can now use this boolean mask to get the desired rows
... df[conditions]
  first second
0     a      b
2     a      b
3     a      b
>>> 

你能在整个数据帧中显示你想要a='jdfb'和b='sdvkb'匹配的所有数据吗?@ammy是的,我想在我的数据帧上应用这个条件。我所有的数据都只是描述。它可能是任何东西。我应该搜索的值可以是任何东西。我只是给你一些样本数据。我要搜索的不仅仅是两个字段。有时它只能是1个字段,也可能是3个字段。dataframe有两个以上的列。您可以手动编写可用于更多列的条件,也可以使用一些逻辑来枚举和迭代这些列,将每个列与所需列值列表中的相应值进行比较。