0

我有两个与证券相关的数据框——相同的结构/数据类型,只是大小不同。

df1:

     security_ID     market_cap
0    ajax123         100000
1    apple456        10000
2    amazon513       20000
3    firefly312      200000


df2:
    
         security_ID     market_cap
    0    ajax123         100000
    1    apple456        10000
    2    amazon513       20000
    3    google566       200000

我想做一个 vlookup 样式检查,以识别 df1 中但不在 df2 中的安全 ID,反之亦然。然后我想删除这些安全 ID,以便我有两个均衡的数据帧以供进一步分析。

我曾尝试使用以下方法来实现这一点,但无济于事:

df1['sec_id_check'] = df1['security_ID'].isin(df2['security_ID'])

理想情况下,这应该df1['sec_id_check']用“True”和“False”填充,但我得到的只是所有 12,498 个条目的“True”。df2我通过创建列反向重复了完全相同的方法df['sec_id_check'],并且在所有 12,510 条记录中我再次得到了“真”

我知道一个事实,即两个数据集中都不存在证券——df1 中的 firefly123 在 df2 中不存在,google566 在 df2 中但不在 df1 中——我本以为这些已被标记为“假” ' 在我的测试中。

期待您的回复 - 非常感谢您提前!

4

2 回答 2

4

您的代码适用于

m = df1['security_ID'].isin(df2['security_ID'])
print(df1[m])
于 2020-09-19T15:34:09.990 回答
2

让我们在 1.1.0 版本中使用pd.DataFrame.comparenew。

df1.compare(df2)

输出:

 security_ID           
         self      other
3  firefly312  google566
于 2020-09-19T15:32:08.673 回答