Highlight the negative values red and positive values black in Pandas Dataframe

Let’s see various methods to Highlight the positive values red and negative values black in Pandas Dataframe.
First, Let’s make a Dataframe:

filter_none

edit
close

play_arrow

link
brightness_4
code

# Import Required Libraries
import pandas as pd
import numpy as np
  
  
# Create a dictionary for the dataframe
dict = {
  'Name': ['Sukritin', 'Sumit Tyagi'
           'Akriti Goel', 'Sanskriti',
           'Abhishek Jain'],
   'Age': [22, 20, 45, 21, 22],
  'Marks': [90, 84, -33, -87, 82]
}
  
# Converting Dictionary to
# Pandas Dataframe
df = pd.DataFrame(dict)
  
# Print Dataframe
print(df)
chevron_right

Output: 

Now, come to the highlighting part. Our objective is to highlight negative values red and positive values black.



Method 1: Using Dataframe.style.apply().

Syntax: DataFrame.style.apply(self, func, axis=0, subset=None, **kwargs)
Parameters: 

  • func: It should take a pandas.Series or pandas.DataFrame based on the axis and should return an object with the same shape. 
  • axis: {0 or ‘index’, 1 or ‘columns’, None}, default 0. Apply to each column (axis=0 or ‘index’), to each row (axis=1 or ‘columns’), or to the entire DataFrame at once with axis=None. 
  • subset: Set of columns or rows on which you want to call the func. 
  • **kwargs: Pass along to func.

Returns: Styler object.

Example 1: Highlighting text.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Define a function for colouring 
# negative values red and 
# positive values black
def highlight_max(s):
    if s.dtype == np.object:
        is_neg = [False for _ in range(s.shape[0])]
    else:
        is_neg = s < 0
    return ['color: red;' if cell else 'color:black' 
            for cell in is_neg]
  
# Using apply method of style 
# attribute of Pandas DataFrame
df.style.apply(highlight_max)
chevron_right

Output: 

 



Example 2: Highlighting cells instead of text.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Define a function which 
# returns the list for 
# df.style.apply() method
def highlight_max(s):
    if s.dtype == np.object:
        is_neg = [False for _ in range(s.shape[0])]
    else:
        is_neg = s < 0
    return ['background: red; color:white' 
            if cell else 'background:black; color:white' 
            for cell in is_neg]
  
# Using apply method of style 
# attribute of Pandas DataFrame
df.style.apply(highlight_max)
chevron_right

Output: 

 

Method 2: Using dataframe.style.applymap() method.

Syntax: DataFrame.style.applymap(self, func, subset=None, **kwargs)
Parameters: 

  • func: It takes a scalar value and return the scalar values 
  • subset: Set of columns or rows on which you want to call the func. 
  • **kwargs: Pass along to func.

Returns: Styler object.

Example 1: Highlighting text.



filter_none

edit
close

play_arrow

link
brightness_4
code

# Define a function for 
# colouring negative values 
# red and positive values black
def highlight_max(cell):
    if type(cell) != str and cell < 0 :
        return 'color: red'
    else:
        return 'color: black'
  
df.style.applymap(highlight_max)
chevron_right

Output: 

 

Example 2: Highlighting cells instead of text.

filter_none

edit
close

play_arrow

link
brightness_4
code

# Define a function which 
# returns string for 
# applymap() method
def highlight_max(cell):
    if type(cell) != str and cell < 0 :
        return 'background: red; color:black'
    else:
        return 'background: black; color: white'
  
df.style.applymap(highlight_max)
chevron_right

Output: 

 Note: pandas.DataFrame.applymap() method passes only single cell into the callable function while the pandas.DataFrame.apply() passes the pandas.Series to the callable function.

Reference: Styling in Pandas
 

Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course.

Article Tags :