2014-09-19 7 views
1

Предположим, мы имеем следующие DataFrameВыберите подмножество панды 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 DataFrame, для которых соответствующие значения B и C совпадают с теми, перечисленных в df_criteria DataFrame. В этом примере, я хотел бы иметь подмножество df_org, содержащую ее строки «0» и «4», как так:

A B C 
0 1 1 1 
4 5 2 1 

Будучи новичком в панде, так, как я реализовал это с помощью for -loop mindset: путем итерации по строкам df_criteria и запроса df_org для каждой строки. Тем не менее, это очень медленно, и у меня создается впечатление, что должен быть более пифонический (и более быстрый) способ, который не использует for -loops. Я также изучил использование DataFrame.lookup, однако это не полезно в моем случае, потому что индексы в df_criteria и df_org не обязательно совпадают.

Любое предложение было бы очень оценено. Большое спасибо!

ответ

7

Простая внутренняя слияние будет работать:

In [285]: 

df_org.merge(df_criteria, on=['B','C']) 
Out[285]: 
    A B C 
0 1 1 1 
1 5 2 1 
Смежные вопросы