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