Skip to main content
 首页 » 编程设计

python之根据从另一个 DataFrame 构建的条件列表选择 Pandas DataFrame 的子集

2025年05月04日13lori

假设我们有以下DataFrame

>>> import pandas as pd 
 
>>> df_org = pd.DataFrame({'A' : [1,2,3,4,5,6],  
                           'B' : [1,1,1,1,2,2], 
                           'C' : [1,2,3,4,1,2]}) 
   A  B  C 
0  1  1  1 
1  2  1  2 
2  3  1  3 
3  4  1  4 
4  5  2  1 
5  6  2  2 

这是另一个 df_criteria,它包含 df_org 的一些列,我们将从中构建我们的标准。例如:

>>> df_criteria = pd.DataFrame({'B' : [1,2],  
                                'C' : [1,1]})  
 
   B  C 
0  1  1 
1  2  1 

我希望能够在 df_org DataFrame 中获取 A 的值,B 和C 匹配 df_criteria DataFrame 中列出的那些。在这个例子中,我想要一个 df_org 的子集,其中包含它的行“0”和“4”,如下所示:

   A  B  C 
0  1  1  1 
4  5  2  1 

作为 pandas 的新手,我实现它的方式是使用 for 循环思维方式:通过遍历 df_criteria 的行并查询 df_org 每行。但是,这非常慢,我的印象是必须有一种不使用 for 循环的更 pythonic(和更快)的方法。我还探索了 DataFrame.lookup 的使用,但是它对我来说没有用,因为 df_criteria 和 df_org 中的索引没有必然匹配。

如有任何建议,我们将不胜感激。非常感谢!

请您参考如下方法:

一个简单的内部合并就可以了:

In [285]: 
 
df_org.merge(df_criteria, on=['B','C']) 
Out[285]: 
   A  B  C 
0  1  1  1 
1  5  2  1