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有两个以上的列。您可以手动编写可用于更多列的条件,也可以使用一些逻辑来枚举和迭代这些列,将每个列与所需列值列表中的相应值进行比较。