通过另一个数据框中已经存在的值过滤数据框

时间:2019-11-08 16:28:04

标签: python-3.x pandas

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

基本上,我有2个端口的数据帧,一个较大的端口大约有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ẩm Phả PortCam Pha Port之类的奇数字符,但是我不知道如何在不删除整个字符串的情况下用通用字母替换所有这些字母。

0 个答案:

没有答案