Условное форматирование дублирующихся значений с использованием pandas - PullRequest
2 голосов
/ 11 января 2020

У меня есть dataFrame с 2 столбцами A и B. Я должен отделить подмножество dataFrames, используя pandas, чтобы удалить все дублирующиеся значения.

For Example

Мой dataFrame выглядит следующим образом

**A     B**
1     1
2     3
4     4
8     8 
5     6
4     7

Тогда вывод должен быть

**A     B**
1     1       <--- both values Highlighted
2     3
4     4       <--- both values Highlighted
8     8       <--- both values Highlighted 
5     6
4     7       <--- value in column A highlighted

Как мне это сделать?

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

1 Ответ

2 голосов
/ 11 января 2020

Вы можете использовать это:

def color_dupes(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
df.style.apply(color_dupes,axis=None)
# if df has many columns: df.style.apply(color_dupes,axis=None,subset=['A','B'])

Пример рабочего кода:

enter image description here

Объяснение: Сначала мы stack кадр данных, чтобы объединить все столбцы в серии и найти duplicated с keep=False, чтобы отметить все дубликаты как истинные:

df.stack().duplicated(keep=False)

0  A     True
   B     True
1  A    False
   B    False
2  A     True
   B     True
3  A     True
   B     True
4  A    False
   B    False
5  A     True
   B    False
dtype: bool

После этого мы unstack() кадра данных, который дает логический кадр данных с той же структурой данных:

df.stack().duplicated(keep=False).unstack()
       A      B
0   True   True
1  False  False
2   True   True
3   True   True
4  False  False
5   True  False

Как только мы получим это, мы назначим цвет фона значениям, если True, иначе нет цвет, используя np.where

...