I need to style a Dataframe:
df = DataFrame({\'A\':[\'Bob\',\'Rob\',\'Dob\'],\'B\':[\'Bob\', \'Rob\',\'Dob\'],\'C\':[\'Bob\',\'Dob\',\'Dob\'],\'D\':[\'Ben\',\'Te
I believe need:
def highlight(x):
c1 = 'background-color: red'
c2 = ''
#define groups of columns for compare by first value of group ->
#first with A, second with D
cols = [['A','B','C'], ['D','E']]
#join all masks together
m = pd.concat([x[g].eq(x[g[0]], axis=0) for g in cols], axis=1)
df1 = pd.DataFrame(c2, index=x.index, columns=x.columns)
df1 = df1.where(m, c1)
return df1
df.style.apply(highlight, axis=None)
EDIT: For multiple colors is possible create dictionary by colors with columns for compare:
def highlight(x):
c = 'background-color: '
cols = {'red': ['A','B','C'], 'blue':['D','E']}
m = pd.concat([x[v].eq(x[v[0]], axis=0).applymap({False:c+k, True:''}.get)
for k, v in cols.items()], axis=1)
return m
EDIT1:
Alternative solution:
def highlight(x):
c = 'background-color: '
cols = {'red': ['A','B','C'], 'blue':['D','E']}
df1 = pd.DataFrame(c, index=x.index, columns=x.columns)
for k, v in cols.items():
m = x[v].eq(x[v[0]], axis=0).reindex(columns=x.columns, fill_value=True)
df1 = df1.where(m, c+k)
return df1
df.style.apply(highlight, axis=None)