Использование Dataframes style.apply для выделения на основе сравнительных значений - PullRequest
0 голосов
/ 27 сентября 2018

В моем коде я использую df.style.applymap () для рендеринга HTML на мою веб-страницу в интрасети.У меня есть следующий код, который хорошо работает для меня (2 столбца передаются моей функции highlight_vals).

def highlight_vals(val, color='green', color1='red'):
        if val > 0.8:
            return 'background-color: %s' % color
        elif val < -0.9:
            return 'background-color: %s' % color1
        else:
            return ''

Теперь я хочу создать аналогичную функцию (или когда-либо использовать текущий highlight_vals)чтобы добиться сравнительного выделения с условием на строках:
, если ValinColumn1> 0,25 * ValinColumn2: # (для той же строки / записи)
return 'background-color:% s'% color # Yellow / Highlights.


Я использую указанную выше функцию в моем views.py :
httresp + = df.style.applymap (highlight_vals, subset = [col1, col2])

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вам нужно использовать apply(axis=1) для итерации по строкам:

def highlight_vals(row, cols=['A', 'B'], color='green'):
    a, b = cols
    styles = {col: '' for col in row.index}
    if row[a] > 0.25 * row[b]:
        styles[a] = 'background-color: %s' % color
        styles[b] = 'background-color: %s' % color
    return styles

df.style.apply(lambda x: highlight_vals(x, cols=['B', 'E']), axis=1)

enter image description here

0 голосов
/ 27 сентября 2018

Из этого вопроса: Разница между map, applymap и методами применения в Pandas Я думаю, что вам нужна функция apply.Он может работать на нескольких столбцах.Вы используете applymap, которое ориентировано на весь фрейм данных (но вы можете обойти это, выбрав столбец из вашего фрейма данных с помощью df.style)

Вот игрушечный пример:

>>> df = pd.DataFrame([[1,2],[3,4]], columns=['A', 'B'])
>>> df['sum_A_B']=df.apply(lambda x: x['A'] + x['B'], axis=1)
>>> df
   A  B  sum_A_B
0  1  2        3
1  3  4        7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...