Условное форматирование для дубликатов с использованием pandas - PullRequest
4 голосов
/ 12 января 2020

У меня есть dataFrame с 6 столбцами. И я хочу сделать условное форматирование на двух столбцах из них. Итак, мой dataFrame выглядит следующим образом:

enter image description here

И я хочу выделить дублирующиеся значения из столбцов College и College_F2. После этого мой фрейм данных будет выглядеть так:

enter image description here

Код, написанный для этого, выглядит следующим образом:
dataFrame_file = pd.read_excel(util.comcastFile2Path(), sheet_name='Sheet1')

def dummy_color(x):
    c1 = 'background-color:red'
    c2 = ''
    cond = dataFrame_file.stack().duplicated(keep=False).unstack()
    df1 = pd.DataFrame(np.where(cond, c1, c2), columns=x.columns, index=x.index)
    return df1

dataFrame_file.style.apply(dummy_color,axis=None,subset=['College', 'College_F2']).to_excel(util.comcastFile2Path)

И ошибка, которую этот код дает мне is

ValueError: Shape of passed values is (6, 6), indices imply (6, 2)

IDE, которую я использую, это PyCharm. Как решить эту проблему?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 января 2020

В решении необходима работа со всеми DataFrame, поэтому пропущен параметр subset и в cond отфильтрованные столбцы для проверки дубликатов, а также добавлено DataFrame.reindex для заполнения False для всех остальных столбцов:

def dummy_color(x):
    c1 = 'background-color:red'
    c2 = ''
    cond = (x[['College', 'College_F2']].stack()
                                        .duplicated(keep=False)
                                        .unstack()
                                        .reindex(x.columns, axis=1, fill_value=False))
    df1 = pd.DataFrame(np.where(cond, c1, c2), columns=x.columns, index=x.index)
    return df1

dataFrame_file.style.apply(dummy_color,axis=None).to_excel(util.comcastFile2Path)

Как и @ anky_91, упомянутое проще - использовать параметр подмножества с x для cond переменной, я думаю, причина в том, что x переменная - это только столбцы, отфильтрованные по списку subset:

def dummy_color(x):
    c1 = 'background-color:red'
    c2 = ''
    cond = x.stack().duplicated(keep=False).unstack()
    df1 = pd.DataFrame(np.where(cond, c1, c2), columns=x.columns, index=x.index)
    return df1

dataFrame_file.style.apply(dummy_color,axis=None, subset=['College', 'College_F2']).to_excel(util.comcastFile2Path)
0 голосов
/ 12 января 2020
def dummy_color(x):
    color = 'red' if (len(dataFrame_file[dataFrame_file['College'] == x]) + len(dataFrame_file[dataFrame_file['College_F2'] == x])) > 1 else ''
    return 'background-color: %s' % color

dataFrame_file.style.applymap(dummy_color, subset=['College', 'College_F2']).to_excel(util.comcastFile2Path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...