Сохраняйте столбцы и строки, содержащие «FAIL», в фрейме данных pandas

Я хотел бы сохранить столбцы, содержащие слово «FAIL».

Входные данные:

Ценности1 Ценности2 Ценности3 Статус1 Статус2 Статус3 1 1 1 ПРОХОДИТЬ ПРОХОДИТЬ НЕУДАЧА 2 2 2 ПРОХОДИТЬ ПРОХОДИТЬ ПРОХОДИТЬ 3 3 3 ПРОХОДИТЬ ПРОХОДИТЬ ПРОХОДИТЬ 4 4 4 ПРОХОДИТЬ НЕУДАЧА ПРОХОДИТЬ

Ожидаемый результат:

Статус2 Статус3 ПРОХОДИТЬ НЕУДАЧА НЕУДАЧА ПРОХОДИТЬ

Текущий выход:

Статус1 Статус2 Статус3 ПРОХОДИТЬ ПРОХОДИТЬ НЕУДАЧА ПРОХОДИТЬ НЕУДАЧА ПРОХОДИТЬ

Мой код:

import pandas as pd
values = range(1,5)
status_pass = ["PASS"]*len(values)
status1 = status_pass[1:]+["FAIL"]
status2 = status1[::-1]
df = pd.DataFrame({"Values1":values,"Values2":values,"Values3":values,"Status1":status_pass,"Status2":status1,"Status3":status2})
# drop unwanted rows
words_to_keep = ["FAIL"]
df = df[df.stack().groupby(level=0).apply(
    lambda x: all(x.str.contains(w, case=False).any() for w in words_to_keep))]
# Filter by column name
df = df.filter(like='Status', axis=1)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте логическое индексирование с любым:

df.loc[:, df.eq('FAIL').any()]

# or for multiple words
# the mask doesn't matter as long
# as you have True/False
df.loc[:, df.isin(words_to_keep).any()]

Выход:

  Status2 Status3
0    PASS    FAIL
1    PASS    PASS
2    PASS    PASS
3    FAIL    PASS

Как это работает:

df.eq('FAIL').any()

Values1    False
Values2    False
Values3    False
Status1    False
Status2     True
Status3     True
dtype: bool

# which is equivalent to
df.loc[:, [False, False, False, False, True, True]]
Ответ принят как подходящий

Используйте DataFrame.loc для фильтрации строк и столбцов по маске, если нужно фильтровать по списку, используйте DataFrame.isin , если нужен скаляр фильтра, используйте DataFrame.eq с DataFrame.any для проверки at хотя бы одно совпадение:

words_to_keep = ["FAIL"]
m = df.isin(words_to_keep)

#m = df.eq("FAIL")

out = df.loc[m.any(axis=1), m.any()]
print (out)
  Status2 Status3
0    PASS    FAIL
3    FAIL    PASS

Подробности:

print (df.isin(words_to_keep))
   Values1  Values2  Values3  Status1  Status2  Status3
0    False    False    False    False    False     True
1    False    False    False    False    False    False
2    False    False    False    False    False    False
3    False    False    False    False     True    False

print (m.any(axis=1))
0     True
1    False
2    False
3     True

print (m.any())
Values1    False
Values2    False
Values3    False
Status1    False
Status2     True
Status3     True
dtype: bool

Другие вопросы по теме

При приеме данных из CSV в XLSX через Pandas и XLSXwriter возникает ошибка отображения чисел в виде текста
Pandas отображает несколько столбцов с помощью фильтра
Как мне извлечь из xml значение «xml:id» в Python, используя ElementTree, в фрейм данных?
Выбор значений экстремальных температур из столбца фрейма данных pandas, где процесс выбора включает в себя несколько усложняющих условий
Использование pandas read_excel с определенной точностью с плавающей запятой, когда текст присутствует в столбцах/строках данных
Как использовать кусочно/частично .diff() или .pct_change() для строк?
Pandas read_json Будущее предупреждение: поведение to_datetime с unit при синтаксическом анализе строк устарело
Как я могу проверить, имеет ли последняя строка кадра данных метку времени между двумя значениями времени?
Сопоставление строки и столбца с числовыми условиями без итерации
Вывод данных CSV Python в виде форматированного текстового файла