maxymoo maxymoo - 1 year ago 50
Python Question

How to highlight both a row and a column at once in pandas

I can highlight a column using the syntax

import pandas as pd
df = pd.DataFrame([[1,0],[0,1]])
df.style.apply(lambda x: ['background: lightblue' if x.name == 0 else '' for i in x])


enter image description here

Similarly I can highlight a row by passing
axis=1
:

df.style.apply(lambda x: ['background: lightgreen' if x.name == 0 else '' for i in x],
axis=1)


enter image description here

However I can't work out how to do both at once; the problem is that when I use
applymap
, I only get the values, not the names of the series that they come from.

Answer Source

How about doing something like this? Enumerate the column and check the index while building up the style list:

df.style.apply(lambda x: ['background: lightblue' if x.name == 0 or i == 0 else '' 
                          for i,_ in x.iteritems()])

enter image description here

Or if you have color preference:

df.style.apply(lambda x: [('background: lightblue' if x.name == 0 
                            else ('background: lightgreen' if i == 0 else '')) 
                            for i,_ in x.iteritems()])

enter image description here