如何同时基于两个值过滤表?

时间:2020-10-01 02:42:33

标签: python pandas dataframe

我有两个数据帧,如果另一个数据帧中不存在其他两个值,我想过滤一个数据帧。两个数据框共享列的名称。

例如,数据框A具有:

col1,col2
1     5
-10   15
6     7

数据框B具有:

col1,col2
6     7
-10   15
-1    5

因此在此示例中,我想在A中选择一个值对,然后查看它是否存在于B中。

A的第一行具有值对1,5,并且由于1,5在B中不存在,因此该行将从A中排除。 A的第二行和第三行的值分别为-10,156,7,由于B中都存在这两个值,因此我想保留它们。

因此,过滤后的表格A的期望输出为:

col1,col2
-10   15
6     7

我该如何实现?

编辑:我首先尝试的一项操作是合并,但是生成的数据帧实际上比原始数据帧大。由于建议了合并和合并101主题,因此我将在此处添加实际数据框。

数据框A具有纬度,经度和id列(id不是索引)。它有363行:

    id       lat        lon
0   0   -33.252192  -70.765291
1   1   -33.224300  -70.780249
2   2   -33.251651  -70.797289
3   3   -33.298574  -70.770133
4   4   -33.214315  -70.787822
... ... ... ...
358 499 -33.227614  -70.770126
359 501 -33.299217  -70.770685
360 502 -33.191476  -70.801492
361 503 -33.239037  -70.780278
362 504 -33.263893  -70.762674

数据框B具有73096行,并且还具有ID,纬度和经度。我只把经纬度放在这里。

        lat        lon
1   -33.260415  -70.713767
2   -33.461718  -70.853525
3   -33.258741  -70.638032
4   -33.544858  -70.578624
8   -33.535512  -70.574188
... ... ...
97724   -33.451817  -70.847999
97725   -33.452225  -70.846520
97726   -33.450841  -70.841494
97729   -33.461407  -70.856090
97730   -33.457633  -70.822085

所以我想看看B中是否存在A中的经纬对,如果不存在,则将其从A中排除。

当我执行A.merge(B)时,我得到的数据帧长1108行。

2 个答案:

答案 0 :(得分:0)

您可以尝试pandas.merge。像df1.merge(df2, how='inner', left_on=['col1','col2'], right_on=['col1','col2'])之类的东西。

(为了帮助您记住,这些参数的命名来自数据库术语的内部联接)

答案 1 :(得分:0)

一个简单的合并就可以了

df_out = dfA.merge(dfB)

输出

   col1  col2
0   -10    15
1     6     7

df.merge默认情况下进行内部联接。