Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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




# 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)


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




# 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)


Output: 

 

Example 2: Highlighting cells instead of text.

Python3




# 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)


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




# 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)


Output: 

 

Example 2: Highlighting cells instead of text.

Python3




# 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)


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
 



Last Updated : 20 Aug, 2020
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads