Хобрук: Ваш путь к мастерству в программировании

Условно форматировать ячейку Python pandas

Я пытаюсь раскрасить, выделить или изменить нравящийся Python pandas DataFrame на основе значения ячейки. например если ячейки в каждой строке больше, чем ячейка в первом столбце этой строки, затем выделите ячейку красным (или любым другим цветом), в противном случае оставьте все как есть.

Я написал цикл for здесь:

for index in range(0, df.shape[0]):
    for column in range(1, df.shape[1]): # from 1 not from 0 because I only need # to compare the 2nd to the last cell of each row with the 1st cell in the row 

        if df.iloc[index][column] - df_BDE_n_months_avg_std_pct.iloc[index][0] > 0:
            then "PLEASE PUT YOUR HELP HERE, I NEED A PIECE OF CODE THAT CAN HIGHLIGHT THE CELL"
        else:
            "DO NOTHING"

Пока я не нашел способ сделать это. Любая помощь будет отличной.


Ответы:


1

Из документов по стилю:

Вы можете применить условное форматирование, визуальный стиль DataFrame в зависимости от данных внутри, используя свойство DataFrame.style.

import pandas as pd
df = pd.DataFrame([[2,3,1], [3,2,2], [2,4,4]], columns=list("ABC"))

df.style.apply(lambda x: ["background: red" if v > x.iloc[0] else "" for v in x], axis = 1)

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


Редактировать: для форматирования определенных ячеек вы можете добавить средства проверки условий, чтобы проверить имя элемента с помощью Series.iteritems() или проверить индекс с помощью enumerate(), например. если вы хотите форматировать, начиная с столбца 3, вы можете использовать перечисление и проверить индекс:

df = pd.DataFrame([[2,3,-3], [3,2,7], [2,4,4]], columns=list("ABC"))

df.style.apply(lambda x: ["background-color: #ff33aa" 
                          if (i >= 2 and (v > x.iloc[0] + x.iloc[1] 
                                          or v < x.iloc[0] - x.iloc[1])) 
                          else "" for i, v in enumerate(x)], axis = 1)

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

17.12.2016
  • Спасибо Псидом! Ваше решение отличное! Дополнительный вопрос, так что если я хочу установить правило как для каждой строки, из 3-й ячейки x, если x › 1-я ячейка + 2-я ячейка, или x ‹ 1-я ячейка - 2-я ячейка, то выделить, иначе ничего не делать? Я думаю, что дело здесь в том, как мне выбрать диапазон ячеек, которые я хочу сравнить? Ваш метод автоматически исключил 1-ю ячейку, поскольку она не будет больше самой себя, но становится немного сложнее, когда применяются другие правила. 18.12.2016
  • Вы можете enumerate каждую строку и проверить индекс, изменяя ячейку только в том случае, если индекс ›=2 в вашем случае. Смотрите обновление. 18.12.2016
  • Еще раз спасибо Псидом. Я еще мало играл с пандами, и ваши предложения бесценны. Я ценю ваше время :) 18.12.2016
  • Привет Psidom, очень похожий вопрос. Вы случайно не знаете, как условно раскрасить приведенную выше ситуацию в гистограмме matplotlib? Допустим, я хочу построить фрейм данных в виде гистограммы, но я хочу только покрасить -3 и 7 в красный цвет, остальные будут белыми или черными. 18.12.2016
  • как я могу применить ко всей строке, например, у меня есть строка с именем total несколько раз в моем фрейме данных, как я могу этого добиться 21.03.2021

  • 2
    import numpy as np
    import pandas as pd
    df = pd.DataFrame(np.random.rand(4,3))
    df.style.applymap(lambda x: 'background-color : yellow' if x>df.iloc[0,0] else '')
    

    дф

    07.11.2018
    Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.