Search code examples
pythonpandasdataframeconditional-formatting

highlight (color) a panda data frame row by index


I have two DataFrames:

d1 = {"col1" : ['A', 'B', 'C'],
      "Col2": ["home", "car","banana" ]}
 
d2 = {"col1" : ['D', 'F','C'],
      "Col2": ["garden", "boat","banana" ]}

df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)

new_df = pd.merge(df1, df2,  on ='col1', how='outer')
new_df

What I am trying to do is highlight the third row "banana" that was found in the two DataFrames. I was using the Styling documentation to find a solution but no luck. I was able to highlight only a single row, but when I have multiple rows it doesn't work.


Solution

  • In case you want to highlight two rows (say index 2 and 4) it is a almost a duplicate of this answer

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

    If instead you are looking to highlight every row that contain a given name in a list (i.e. lst = ['car', 'boat']) you can use

    new_df.style.apply(lambda x: ['background: lightgreen' if (set(lst).intersection(x.values)) 
                                  else '' for i in x], 
                       axis=1)