Условие OR в .str.contains
текст, выделенный жирным шрифтом
import pandas as pd
(df
.query(qry).loc[lambda x: x["название"].str.contains(r"rtx", case=False)].sort_values('цена', ascending=False)
Как правильно прописать, чтобы поиск шёл по вхождению: rtx или palit или msi и т.д., а не только по rtx как сейчас. Пробовал OR в разных вариантах подставить - безуспешно.
Ответы (2 шт):
Попробуйте так:
str.contains(r"rtx|palit|msi", case=False, regex=True)
Для того, чтобы проверить на вхождение одной из искомых подстрок в строку обычно используют регулярные выражения - "substr1|substr2|substr3". Но в вашем случае безопаснее будет убедиться, что подстроки по совпадению не являются частью другого слова:
srch_strings = ["rtx", "palit", "msi"]
srch_pat = "|".join(rf"\b{s}\b"for s in srch_strings)
df.query(qry).loc[lambda x: x["название"].str.contains(srch_pat, case=False)]
получившееся регулярное выражение будет искать только такие вхождения, где искомое слово отделено границами слова ("\b"). Т.е. в строках "principalities" и "clumsiness" вхождения найдены не будут.
Пример:
In [66]: df
Out[66]:
название
0 a palit video card
1 principalities
2 clumsiness
3 msi
In [67]: print(srch_pat)
\brtx\b|\bpalit\b|\bmsi\b
In [68]: df.loc[lambda x: x["название"].str.contains(srch_pat, case=False)]
Out[68]:
название
0 a palit video card
3 msi