Соответствие строк в датафрейме Python Pandas, когда есть разные возможности - PullRequest
0 голосов
/ 05 июля 2018

введите описание изображения здесь

У меня есть Dataframe (300 000 строк) с 4 столбцами. У меня есть столбец «Модель», где у меня есть следующие примеры значений.

  • 1) CPL40AUP50 (B, W) (бланк, EM, PCEM, MSEM) 2) CPL40AUP50 (B, W) (400, MS) 3) CPL40AUP50 (B, W) PC 4) CPL40AUP50 (B, W) PCMS 5) CPL40AUP50 [B, W] [Бланк, 400] 6) CPL40AUP XXXX XXXXX

В поле модели любое значение, например (A, B), означает, что оно может быть либо A, либо B. Например, поле 2 означает, что возможно 4 комбинации CPL40AUP50B400 CPL40AUP50BMS CPL40AUP50W400 CPL40AUP50WMS а поле 6 означает CPL 40 AUP "XXXX" "XXXXX" - каждый раз, когда имеется более 2 непрерывных XXX, это означает, что любой символ принимается на этих позициях. Количество XXX = количество символов в этом месте

Пример кадра данных прилагается.

Прикрепление образца в качестве словаря

{'Модель №': {152001: 'CPL40AUP50 (B, W) (Бланк, EM, PCEM, MSEM)', 152103: «CPL40AUP50 (B, W) (400, MS)», 152192: «CPL40AUP50 (B, W) PC», 152196: «CPL40AUP50 (B, W) PCMS», 291083: 'CPL40AUP50 [B, W] [Blank, 400]'}, «Идентификатор продукта»: {152001: «PGK58TGD», 152103: «P5QBAPTD», 152192: «PFNJED7R», 152196: «PYSCGR1W», 291083: 'PH57RZA3'}, «Сообщаемое CCT»: {152001: 5000.0, 152103: 5000,0, 152192: 5000,0, 152196: 5000,0, 291083: 5000,0}, «Сообщаемая мощность»: {152001: 41.07, 152103: 41,07, 152192: 41,07, 152196: 41,07, 291083: 40.0}}

Часть 1 Я хочу найти номер модели, который хранится в переменной. a = CPL40AUP50B400 в этом столбце и возвращает всю строку, где может существовать эта возможная комбинация. Я хочу, чтобы был найден только точный критерий поиска и вывести строку, а не частичное совпадение строки

Я заменил все квадратные скобки "[]" в скобках "()" Я заменил всю запятую "," на '|'

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

Часть 2 Чтобы найти, когда есть XXX. Если есть XXX, это означает, что вместо XXX может быть любой символ.

Пример: 6) CPL40AUP XXXX XXXXX

Значит, CPL40AUP AAAA AAAAA или CPL40AUP BBBB 11111

Все что угодно может прийти вместо XXX. Так что мне нужно найти строку, где есть номер модели, который совпадает со всеми другими символами, кроме XXX

1 Ответ

0 голосов
/ 06 июля 2018

Во-первых, установка DataFrame для тестирования:

import pandas as pd
model = ["CPL40AUP50(B,W)(Blank ,EM, PCEM, MSEM) ", "CPL40AUP50(B,W) (400, MS) ", "CPL40AUP50(B,W)PC ", "CPL40AUP50(B,W)PCMS ", "CPL40AUP50[B,W][Blank, 400] ", "CPL40AUP XXXX XXXXX"]
df = pd.DataFrame({'Model': model, 'Wattage': range(40, 46)})

Для первого вопроса, получив строки, содержащие определенную строку (например, «ПК»), выполните следующее:

df[ df['Model'].str.contains("PC") ]

str.contains("PC") возвращает логическую серию, которая имеет значение True, если в этой строке содержится «PC» в поле «Модель». Затем df[ mask ] возвращает строки с маской True.

«ПК» - это шаблон регулярного выражения, а не просто буквенные буквы. Итак, для вашего второго вопроса следующее получит любую из строк, которые содержат два или более последовательных символа X:

df[ df['Model'].str.contains("XX+") ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...