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