假设我们有以下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
数据帧为其中的相应值B
,并C
匹配在列出的df_criteria
数据帧.在这个例子中,我想有一个df_org
包含其行'0'和'4' 的子集,如下所示:
A B C 0 1 1 1 4 5 2 1
作为熊猫的新手,我实现它的方式是使用for
-loop思维模式:迭代行df_criteria
并查询df_org
每一行.然而,这是非常缓慢的,我的印象是必须有一个更加pythonic(和更快)的方式,不使用for
-loops.我也研究了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