Боюсь, что решение очевидно или вопрос дубликат, но я пока не смог найти ответ: у меня есть фрейм данных pandas, который содержит длинные строки, и мне нужно сопоставить две строки одновременно. Я нашел версию "или" несколько раз, но пока не нашел решения "и".
Пожалуйста, предположим, что следующий фрейм данных, где интересная информация "тип элемента" и тип части "разделены случайным образом между элементами:
import pandas as pd
data = pd.DataFrame({"col1":["element1_random_string_subpartA"
, "element2_ran_str_subpartA"
, "element1_some_text_subpartB"
, "element2_some_other_text_subpartB"]})
Теперь я хотел бы отфильтровать все строки, которые содержат element1 и subpartA.
data.col1.str.contains("element1|subpartA")
Вернуть фрейм данных
True
True
True
False
Что является ожидаемым результатом. Но мне нужна комбинация "И" и
data.col1.str.contains("element1&subpartA")
Возвращается
False
False
False
False
Хотя я бы ожидал
True
False
False
False
1 ответ
Regex and
- это непросто:
m = data.col1.str.contains(r'(?=.*subpartA)(?=.*element1)')
Проще объединить оба условия с &
для побитового AND
:
m = data.col1.str.contains("subpartA") & data.col1.str.contains("element1")
print (m)
0 True
1 False
2 False
3 False
Name: col1, dtype: bool
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.