我有两个数据帧,如果另一个数据帧中不存在其他两个值,我想过滤一个数据帧。两个数据框共享列的名称。
例如,数据框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,15
和6,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行。
答案 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
默认情况下进行内部联接。