Как извлечь совпадения названий округов Великобритании из строки - PullRequest
2 голосов
/ 29 мая 2020

У меня есть список названий округов Великобритании и 8397 названий должностей, которые могут содержать эти названия округов. Я могу определить, являются ли эти совпадения истинными или ложными, или отфильтровать строки, в которых было найдено совпадение.

Однако я хотел бы выделить совпадение в другой столбец, когда оно найдено, но не знаю, как это сделать. Например, если совпадение с графством Суррей из ukcounties найдено в Великобритании ['Название'], извлеките графство Суррей в другой столбец.

Спасибо !!

ukcounties = ['Somerset', 'Staffordshire', 'Suffolk', 'Surrey']

UK['Title'] = 
['Relief Chef de Partie  Croydon  Surrey  Live in', 
'Pastry Chef Baker  artisan bakery  Suffolk Coast']

UK.Title.apply(lambda sentence: any(word in sentence for word in ukcounties))

Output:
9        False
12       False
13        True
26       False
27       False
         ...  
55157    False
55158    False
55159     True
55161     True
55165    False
Name: Title, Length: 8397, dtype: bool

UK[UK.Title.str.contains('|'.join(ukcounties))]
Output: 1003 rows × 12 columns

1 Ответ

1 голос
/ 31 мая 2020

Вы можете использовать

UK['Title'].str.extract(r'\b({})\b'.format('|'.join(ukcounties)))

Pandas test:

>>> import pandas as pd
>>> UK = {'Title': ['Relief Chef de Partie  Croydon  Surrey  Live in', 
'Pastry Chef Baker  artisan bakery  Suffolk Coast']}
>>> df = pd.DataFrame(UK)
>>> ukcounties = ['Somerset', 'Staffordshire', 'Suffolk', 'Surrey']
>>> df['Title'].str.extract(r'\b({})\b'.format('|'.join(ukcounties)))
#             0
#    0   Surrey
#    1  Suffolk

r'\b({})\b'.format('|'.join(ukcounties)) сформирует регулярное выражение, подобное \b(Somerset|Staffordshire|Suffolk|Surrey)\b, где

  • \b - граница слова
  • (Somerset|Staffordshire|Suffolk|Surrey) - Группа 1: любое из слов в круглых скобках (| - оператор чередования)
  • \b - граница слова
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...