Python 3.x 按已在另一个数据帧中出现的值筛选数据帧

Python 3.x 按已在另一个数据帧中出现的值筛选数据帧,python-3.x,pandas,Python 3.x,Pandas,这不应该是一个困难的问题,但是我不确定为什么我尝试过的所有方法似乎都不起作用 基本上我有两个端口的数据帧,较大的一个大约有3600个端口,而另一个大约有660个。较小的数据帧只是从数据库查询返回的数据帧,以查看较大数据集中的哪些数据帧已经避免了冗余实体 因此,在本例中,它只是一个简单的过滤器,用于查看名称是否出现在两个数据帧中,并将其从大数据帧中删除。我已经参考了其他几个问题并尝试了修复,但我不确定它们为什么不起作用 Data frame 1 X Y

这不应该是一个困难的问题,但是我不确定为什么我尝试过的所有方法似乎都不起作用

基本上我有两个端口的数据帧,较大的一个大约有3600个端口,而另一个大约有660个。较小的数据帧只是从数据库查询返回的数据帧,以查看较大数据集中的哪些数据帧已经避免了冗余实体

因此,在本例中,它只是一个简单的过滤器,用于查看名称是否出现在两个数据帧中,并将其从大数据帧中删除。我已经参考了其他几个问题并尝试了修复,但我不确定它们为什么不起作用

Data frame 1 

            X          Y   FID  INDEX_NO  REGION_NO        PORT_NAME COUNTRY  \
0 -124.066667  44.800000  1001     16835      16000        DEPOE BAY      US   
1 -124.050000  46.300000  1002     16838      16000           ILWACO      US   
2 -122.483333  37.500000  1003     16290      16000       PRINCETOWN      US   
3 -105.266667  20.616667  1004     15790      15700  PUERTO VALLARTA      MX   
4 -106.416667  23.200000  1005     15810      15700         MAZATLAN      MX   

Dataframe 2

      eid                 name  
0   AAAA       Port of Manta   
1   BBBB       port of Antofagasta   
2   CCCC       port of IJmuiden   
3   DDDD       port of Augusta   
4   EEEE       port of Grimsby 
我做了一些基本的字符串清理以避免任何意外,因此将两个端口功能的名称都小写

我尝试了两种过滤方法,它们只从DF1中取出660个端口中的大约77个。我认为最初的匹配情况很差,但检查excel中的名称,看看它们是否出现在两个数据帧中,就会发现所有660个都出现在两个数据帧中

# Method 1

world_ports['PORT_NAME'] = world_ports['PORT_NAME'].str.lower()

match_df = world_ports[~world_ports['PORT_NAME'].isin(port)]



# Method 2
count = 0

for a, b in existing_ports.iterrows():

    count += 1
    percentage = round(100 * (count / len(world_ports.PORT_NAME)), 2)
    print('\rPercent Completed: ', percentage, '%', 'Search Term: ', b['name'], end='', flush=True)

    n_name = b['name'].lower().replace('port', '').replace('of', '').strip() # tried this filter option
    n_name = b['name'].lower() # tried this filter option

    for c, d in world_ports.iterrows():

        e_name = d['PORT_NAME'].lower().strip()

        if n_name in e_name is True:
            print('Matches: ', n_name, ': ', e_name)
            world_ports = [~world_ports.PORT_NAME.isin(n_name)]

print(len(world_ports))
我尝试了
isin()
contains()
,但都不能正常工作

我还检查了一些端口是否包含像
C这样的奇数字符ẩ博士ả Port
vs
Cam Pha Port
但我不知道如何用通用字母替换所有出现的字母,而不删除整个字符串