Pandas слияние с частичным совпадением строки и условием - PullRequest
0 голосов
/ 26 мая 2020

Проблема

У меня есть два фрейма данных df1 форма (1597, 37) и df2 форма (27293, 115). Оба они содержат имена, почтовые индексы и другие данные некоторых компаний. Имена не являются точным совпадением.

Пошаговое руководство для их объединения будет следующим:

  1. Фильтр по почтовому индексу
  2. Проверьте названия компаний в df1 и df2 для поиска совпадающих имен и удаления компаний из df2, которые уже есть в df1.
  3. Добавление новых компаний из df2 в df1.
  4. Окончательная база данных составляет df1 с добавлением новых компаний из df2.

Если есть совпадение по названию, но почтовый индекс не тот, мы предполагаем, что это другая компания, и сохраняем его.

Пример:

df1 = pd.DataFrame({'NAME': ['Company A', 'Company B', 'Company C', 'Company D'], 
                    'Postal Code': [9001, 9002, 9003, 9004]})    
df2 = pd.DataFrame({'Name': ['this is b', 'some company d', 'c is a company', 
                             'COMANY f', 'COMANY x', 'Company z','w company'], 
                    'CP': [9002, 9006, 9003, 9005, 9001, 9007, 9008],
                    'Some other data': np.random.randn(7)})

df1



    NAME        Postal Code  
0   Company A   9001         
1   Company B   9002         
2   Company C   9003         
3   Company D   9004         

df2


    Name            CP      Some other data
0   this is b       9002    1.867558
1   some company d  9006    -0.977278
2   c is a company  9003    0.950088
3   COMANY f        9005    -0.151357
4   COMANY x        9001    -0.103219
5   Company z       9007    0.410599
6   w company       9008    0.144044

Желаемый результат:

df1_merged

    NAME           Postal Code   Some other data
0   Company A       9001         NaN
1   Company B       9002         0.400157
2   Company C       9003         0.978738
3   Company D       9004         NaN
4   some company d  9006         -0.977278
5   COMANY f        9005         -0.151357
6   COMANY x        9001         -0.103219
7   Company z       9007         0.410599
8   w company       9008         0.144044
...