Я пытался распечатать фрейм данных Pandas в html и выделить отдельные целые строки, если значение одного конкретного столбца для этой строки превышает пороговое значение. Я просмотрел Pandas Styler Slicing и попытался изменить функцию highlight_max для такого использования, но, похоже, с треском провалился; если я попытаюсь, скажем, заменить is_max проверкой, находится ли значение данной строки выше указанного порога (например, что-то вроде
is_x = df['column_name'] >= threshold
), не ясно, как правильно передать такую вещь или что вернуть.
Я также попытался просто определить его в другом месте, используя df.loc, но это тоже не сработало.
Также возникла другая проблема: если я опущу этот столбец (в настоящее время критерий) после этого, будет ли стиль сохраняться? Мне интересно, если бы df.loc предотвратил бы такую проблему.
2 ответа
Это решение позволяет вам передать метку столбца или список меток столбца, чтобы выделить всю строку, если это значение в столбце (столбцах) превышает пороговое значение.
import pandas as pd
import numpy as np
np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
axis=1)
df.iloc[0, 2] = np.nan
def highlight_greaterthan(s, threshold, column):
is_max = pd.Series(data=False, index=s.index)
is_max[column] = s.loc[column] >= threshold
return ['background-color: yellow' if is_max.any() else '' for v in is_max]
df.style.apply(highlight_greaterthan, threshold=1.0, column=['C', 'B'], axis=1)
Выход:
Или для одного столбца
df.style.apply(highlight_greaterthan, threshold=1.0, column='E', axis=1)
Вот более простой подход:
Предположим, у вас есть кадр данных 100 x 10, df. Также предположим, что вы хотите выделить все строки, соответствующие столбцу, например, «длительность», больше 5.
Сначала вам нужно определить функцию, которая выделяет ячейки. Настоящий трюк в том, что вам нужно вернуть строку, а не одну ячейку. Например,
def highlight(s): if s.duration > 5: return ['background-color: yellow']*10 else: return ['background-color: white']*10
** Обратите внимание, что возвращаемой частью должен быть список из 10 (соответствующий количеству столбцов). Это ключевая часть.
Теперь вы можете применить это к стилю данных как:
df.style.apply(highlight, axis=1)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.