Как фильтровать строки на основе связанного с порядком ограничения?

У меня есть следующий фреймворк:

df = ID TYPE VD_0 VD_1 VD_2 VD_3 1 ABC V1234 456 123 564 2 DBC 456 A45 123 564 3 ABD 456 V1234 456 123 4 ABD 123 V1234 SSW 123 

Существует следующий список значений VD_0 , VD_1 , VD_2 и VD_3 :

 myList = [V1234,456,A45] 

Я хочу получить только те строки в df которые имеют 2 секвенциальных myList значений из myList в столбцах VD_0 , VD_1 , VD_2 и VD_3 .

В результате получается следующее:

 result = ID TYPE VD_0 VD_1 VD_2 VD_3 1 ABC V1234 456 123 564 2 DBC 456 A45 123 564 3 ABD 456 V1234 456 123 

Например, в строке с ID 1 значения VD_0 и VD_1 равны соответственно V1234 и 456 , и оба этих значения принадлежат myList . Та же логика применяется к строкам с ID 2 ( 456 , A45 ) и 3 ( 456 , V1234 ).

Как мне это сделать?

2 Solutions collect form web for “Как фильтровать строки на основе связанного с порядком ограничения?”

Я согласен с началом ответа MaxU, но конец должен быть проще IIUC. Фильтр, который вы хотите, должен получить 2 последовательных матча из вашего списка. Вы можете получить этот ответ, сказав, что вы хотите, чтобы строка за строкой была равна, по крайней мере, 2, если вы суммируете их по два. Это называется суммой 2-периодного окна прокатки вдоль оси = 1. Затем вы берете максимальное значение каждой строки, а совпадения имеют большее или равное значение, чем 2:

 subset = df.filter(like='VD_') df[subset.isin(myList).rolling(2, axis=1).sum().max(axis=1)>=2] Out[26]: ID TYPE VD_0 VD_1 VD_2 VD_3 0 1 ABC V1234 456 123 564 1 2 DBC 456 A45 123 564 2 3 ABD 456 V1234 456 123 

Попробуй это:

 In [112]: subset = df.filter(like='VD_') In [113]: df[subset[subset.isin(myList)].stack().duplicated().unstack().any(1)] Out[113]: ID TYPE VD_0 VD_1 VD_2 VD_3 1 2 DBC 456 A45 123 564 2 3 ABD 456 V1234 456 123 3 4 ABD 123 V1234 SSW 123 

Пояснения:

 In [114]: subset Out[114]: VD_0 VD_1 VD_2 VD_3 0 V1234 456 123 564 1 456 A45 123 564 2 456 V1234 456 123 3 123 V1234 SSW 123 In [115]: subset.isin(myList) Out[115]: VD_0 VD_1 VD_2 VD_3 0 True True False False 1 True True False False 2 True True True False 3 False True False False In [116]: subset[subset.isin(myList)] Out[116]: VD_0 VD_1 VD_2 VD_3 0 V1234 456 NaN NaN 1 456 A45 NaN NaN 2 456 V1234 456 NaN 3 NaN V1234 NaN NaN In [118]: subset[subset.isin(myList)].stack() Out[118]: 0 VD_0 V1234 VD_1 456 1 VD_0 456 VD_1 A45 2 VD_0 456 VD_1 V1234 VD_2 456 3 VD_1 V1234 dtype: object In [119]: subset[subset.isin(myList)].stack().duplicated() Out[119]: 0 VD_0 False VD_1 False 1 VD_0 True VD_1 False 2 VD_0 True VD_1 True VD_2 True 3 VD_1 True dtype: bool In [120]: subset[subset.isin(myList)].stack().duplicated().unstack() Out[120]: VD_0 VD_1 VD_2 0 False False None 1 True False None 2 True True True 3 None True None In [121]: subset[subset.isin(myList)].stack().duplicated().unstack().any(1) Out[121]: 0 False 1 True 2 True 3 True dtype: bool 
  • Как сортировать по двум различным столбцам DataFrame?
  • Как использовать sklearn fit_transform с pandas и вернуть dataframe вместо numpy массива?
  • Выход Pandas Dataframe для JSON
  • Добавление записей в строку, чтобы сделать их однородными
  • Как применять различные функции к разным столбцам в pandas dataframe
  • Отображение даты линии Pandas Dataframe на xaxis
  • Вставьте диаграмму pandas в файл Excel с помощью XlsxWriter
  • Веб-скребок с Selenium Python
  •  
    Interesting Posts for Van-Lav

    Django Rest Framework: перенаправление на Amazon S3 не работает при использовании аутентификации Token

    Запуск подпроцесса python имеет другое поведение в зависимости от запуска

    Поиск регулярного выражения Python для строки в начале строки в файле

    Как получить имена переменных из строки для метода format ()

    PyQt рушится как Windows APPCRASH

    Django Admin – отключить действие «Добавить» для определенной модели

    Как закодировать целое число в строку base64 в python 3

    Найти среднее из каждых трех столбцов в кадре данных Pandas

    Python: как заставить «print» использовать __unicode__ вместо __str__ или иначе «распечатать» сообщение без явного вызова unicode ()

    Открытый модуль OpenCV2 Python createBackgroundSubtractor не найден

    Как инициализировать переменную тензора как матрицу идентичности в TensorFlow

    Python: как получить доступ к переменной, объявленной в родительском модуле

    Почему csv.reader не является питоническим?

    Удаление дубликатов из данных json

    TimeSeries в Боке с использованием фрейма данных с индексом

    Python - лучший язык программирования в мире.