假设我们有以下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
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_criteria
和df_org
中的索引不一定匹配。
非常感谢任何建议。非常感谢!
答案 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