Python 如何从选择列表中的列列表中选择过滤器

Python 如何从选择列表中的列列表中选择过滤器,python,pandas,Python,Pandas,我希望能够过滤数据帧,并将列列表所在的行保留在选择列表中 df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)}) 输入: df A B C 0 5 1 0 1 6 2 1 2 3 3 2 3 4 5 3 filter_list = [(6,2),(3,3)] 预期结果: df A B C 1 6 2 1 2 3 3 2 我尝试过loc和map,但没有找到解决

我希望能够过滤数据帧,并将列列表所在的行保留在选择列表中

df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)})
输入:

df
   A  B  C
0  5  1  0
1  6  2  1
2  3  3  2
3  4  5  3

filter_list = [(6,2),(3,3)]
预期结果:

df
   A  B  C
1  6  2  1
2  3  3  2
我尝试过loc和map,但没有找到解决方案

提前感谢。

使用应用程序:

>>> fltr =  df.apply(lambda x: (x["A"], x["B"]) in {(6,2),(3,3)}, axis=1)
# 0    False
# 1     True
# 2     True
# 3    False
# dtype: bool
>>> df[fltr]
   A  B  C
1  6  2  1
2  3  3  2
使用和应用:

>>> fltr =  df.apply(lambda x: (x["A"], x["B"]) in {(6,2),(3,3)}, axis=1)
# 0    False
# 1     True
# 2     True
# 3    False
# dtype: bool
>>> df[fltr]
   A  B  C
1  6  2  1
2  3  3  2
创建元组位置的布尔索引器,然后从框架中选择这些行

In [36]: df.loc[Series(zip(df.A,df.B)).isin([(6,2),(3,3)])]
Out[36]: 
   A  B  C
1  6  2  1
2  3  3  2
在0.13中(即将发布!),您可以这样做

创建元组位置的布尔索引器,然后从框架中选择这些行

In [36]: df.loc[Series(zip(df.A,df.B)).isin([(6,2),(3,3)])]
Out[36]: 
   A  B  C
1  6  2  1
2  3  3  2
在0.13中(即将发布!),您可以这样做


一位同事通过创建过滤数据帧,为我提供了一个关于大数据帧的更快解决方案:

from pandas import merge, DataFrame
df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)})
filter_list = [(6,2),(3,3)]
filter_df = DataFrame(filter_list, columns=['A','B'])
filtr = merge(df, filter_df, on=["A","B"], how="inner")

一位同事通过创建过滤数据帧,为我提供了一个关于大数据帧的更快解决方案:

from pandas import merge, DataFrame
df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3,5], 'C': range(4)})
filter_list = [(6,2),(3,3)]
filter_df = DataFrame(filter_list, columns=['A','B'])
filtr = merge(df, filter_df, on=["A","B"], how="inner")

我在玩这个,也在看书。你必须把它压缩成一个系列,这“正常”吗?似乎应该有某种方法可以直接对
df
的子集进行比较。是的,您正在有效地比较元组,因为您希望在A和B中进行比较,排序很重要。举例来说,这还不足以说,在A和Byou中,你将能够在0.13中使用df.isin:Cool约0.13来完成这项工作。我在考虑像
df.loc[:,['A','B']==(6,2)
df.loc[:,['A','B']]这样的测试。isin(过滤器列表)
将读取文档。我在玩这个,也在阅读。你必须把它压缩成一个系列,这“正常”吗?似乎应该有某种方法可以直接对
df
的子集进行比较。是的,您正在有效地比较元组,因为您希望在A和B中进行比较,排序很重要。举例来说,这还不足以说,在A和Byou中,你将能够在0.13中使用df.isin:Cool约0.13来完成这项工作。我在考虑像
df.loc[:,['A','B']==(6,2)
df.loc[:,['A','B']]这样的测试。isin(过滤器列表)
将读取文档。在我的大数据帧上测试,Jeff的答案更快。无论如何,谢谢你在我的大数据框上测试,杰夫的回答更快了。无论如何谢谢你