Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在多列上同时按条件列表筛选数据帧行_Python_Pandas_Filter_Multiple Columns - Fatal编程技术网

Python 如何在多列上同时按条件列表筛选数据帧行

Python 如何在多列上同时按条件列表筛选数据帧行,python,pandas,filter,multiple-columns,Python,Pandas,Filter,Multiple Columns,我有一个数据框,我想在其中过滤同时适用于两列的条件列表的行。例如: pd.DataFrame({'A':['Y','Y','Y','Z','Z'],'B':[1,2,2,3,4],'C':[100,200,234,358,4243]}) A B C 0 Y 1 100 1 Y 2 200 2 Y 2 234 3 Z 3 358 4 Z 4 4243 filter_on=[('Y',2),('Z',4)] 当筛选A和B在filter_开启时有

我有一个数据框,我想在其中过滤同时适用于两列的条件列表的行。例如:

pd.DataFrame({'A':['Y','Y','Y','Z','Z'],'B':[1,2,2,3,4],'C':[100,200,234,358,4243]})
   A  B     C
0  Y  1   100
1  Y  2   200
2  Y  2   234
3  Z  3   358
4  Z  4  4243
filter_on=[('Y',2),('Z',4)]
当筛选A和B在filter_开启时有两个值中的任何一个时,我应该得到以下数据帧:

   A  B     C
1  Y  2   200
2  Y  2   234
4  Z  4  4243
转换为元组后尝试使用isin

转换为元组后尝试使用isin

您可以从列中构建一个掩码,并使用它来计算掩码,如下所示:

mask = pd.MultiIndex.from_arrays([df['A'], df['B']]).isin(filter_on)
print(df[mask])
输出

您可以从列中构建一个掩码,并使用它来计算掩码,如下所示:

mask = pd.MultiIndex.from_arrays([df['A'], df['B']]).isin(filter_on)
print(df[mask])
输出

这个简洁的set_index和index.isin解决方案怎么样

df[df.set_index(['A', 'B']).index.isin(filter_on)]

   A  B     C
1  Y  2   200
2  Y  2   234
4  Z  4  4243
这个简洁的set_index和index.isin解决方案怎么样

df[df.set_index(['A', 'B']).index.isin(filter_on)]

   A  B     C
1  Y  2   200
2  Y  2   234
4  Z  4  4243
df[df.set_index(['A', 'B']).index.isin(filter_on)]

   A  B     C
1  Y  2   200
2  Y  2   234
4  Z  4  4243