Извинения, если это перекрестный список; Я искал некоторое время!
Я работаю с очень большими, очень грязными данными в Pandas. Интересующая переменная представляет собой строку и содержит один или несколько экземпляров бизнес-имен с (без) типичными бизнес-суффиксами (например, LL C, LP, LTD). Например, у меня может быть «AB C LL C XYZ, LL C XYZ, LTD». Моя цель - найти первый экземпляр суффикса, соответствующего списку. Мне также нужно извлечь все до первого матча. Для приведенного выше примера я бы нашел / извлек "AB C LL C". Рассмотрим следующие данные:
sfx = ['LLC','LP','LTD']
dat = pd.DataFrame({'name':['ABC LLC XYZ,LLC XYZ, LTD','IJK LP, ADDRESS']})
Пока что я выполнил это для одного случая запутанным способом, который мне не подходит:
one_string = 'ABC LLC XYZ,LLC XYZ, LTD'
indexes=[]
keywords=dict()
for sf in sfx:
indexes.append(one_string.index(sf,0))
keywords[one_string.index(sf,0)]=sf
indexes.sort()
print(one_string[0:indexes[0]]+ keywords[indexes[0]])
Я ищем более эффективный (возможно, векторизованный) способ сделать это для всего столбца. Кроме того, мне нужно включить регулярное выражение, чтобы избежать извлечения суффиксов, когда такие же буквенные комбинации появляются в тексте. Шаблон регулярного выражения, который мне нужен, может выглядеть примерно так (LL C появляется после пробела или запятой и находится в конце слова):
reg_pattern = r`(?<=[\s\,])LLC\b|(?<=[\s\,])LP\b|(?<=[\s\,])LTD\b`
ОБНОВЛЕНИЕ
Простое решение от Wiktor. Я также понял, что как только у меня будет извлечено то, что предшествует суффиксу, мне нужно будет извлекать все, что идет после него, отдельно. Бросить решение в позитивный взгляд не сработало. Очень признателен!