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

时间:2014-09-19 15:00:18

标签: python pandas dataframe

假设我们有以下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

我希望能够在A数据框中获取df_org的值BC的相应值与之匹配df_criteria DataFrame中列出的内容。在这个示例中,我希望有df_org的子集包含其行' 0'和' 4',像这样:

   A  B  C
0  1  1  1
4  5  2  1

作为熊猫的新手,我实现这一点的方式是使用for - 循环思维模式:迭代df_criteria行并查询每个df_org行。然而,这是非常缓慢的,我的印象是必须有一个更加pythonic(和更快)的方式,不使用for - 循环。我还探讨了DataFrame.lookup的使用情况,但是在我的情况下它并没有用,因为df_criteriadf_org中的索引不一定匹配。

非常感谢任何建议。非常感谢!

1 个答案:

答案 0 :(得分:7)

简单的内部合并可以起作用:

In [285]:

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