У меня есть список терминов, и я хотел бы найти совпадение для определенного слова.
Я пытаюсь найти совпадение из этого списка: список терминов = ['торт', 'бисквит']
ожидаемый результат:
Преобразуйте список в наборы и используйте set.isdisjoint в понимании списка с преобразованием значений списков в нижний регистр:
terms = ['cake', 'biscuit']
S = set(terms)
df['Column B'] = [not set(y.lower() for y in x).isdisjoint(S) for x in df['meta']]
df['Column B'] = [not set(map(str.lower, x)).isdisjoint(S) for x in df['meta']]
print (df)
meta Column B
0 [Home, grocery, cake] True
1 [Home, grocery, Biscuit, Oreo] True
потому что не совпадает Biscuit
:
df['Column B'] = [not set(x).isdisjoint(S) for x in df['meta']]
print (df)
meta Column B
0 [Home, grocery, cake] True
1 [Home, grocery, Biscuit, Oreo] False
Вы можете использовать перекресток set
:
terms = {'cake', 'biscuit'}
df['Column B'] = [bool(set(x)&terms) for x in df['meta']]
Если регистр не имеет значения (например, 'Biscuit'
/'biscuit'
), сделайте строки строчными с помощью str.lower (или str.casefold):
df['Column B'] = [bool(set(map(str.lower, x))&terms) for x in df['meta']]
Выход:
meta Column B
0 [Home, grocery, cake] True
1 [Home, grocery, Biscuit, Oreo] True