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:

Python3

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.

Python3

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.

Python3

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.

Python3



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.

Python3

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
 




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.