How to get the minimum value of two or more pandas columns?

Today We will learn how to quickly calculate the minimum value between two columns / series in a pandas DataFrame. In most cases, we will use the DataFrame min() to quickly calculate the lowest values across columns and rows.

Example DataFrame

Before getting started, we will build some simple generic sales data:

import pandas as pd

rev_dict = {
             'area' : ['B2B', 'B2C', 'Retail', 'Online'],
            'Q1' : [187, 211, 364, 534],
            'Q2' : [324, 234, 561, 345],
            'Q3' : [278, 345, 183, pd.NA],

sales= pd.DataFrame (rev_dict)


Here’s the data we will be working with:


Find the minimum value between two columns

Let’s assume we would like to focus on Q1 and Q2.

subset = ['area','Q2', 'Q3']

This returns a subset of our DataFrame. To calculate the minimum of each column we’ll just call the min() method. Note the usage of the numeric_only parameter that allows to compare only numeric values.

sales[subset].min(numeric_only = True)

A Series representing the smallest value of each column is returned.

area    B2B
Q2      234
Q3      183
dtype: object

Calculate Lowest value between row values

Conversely, if you want to calculate the min value across multiple columns of the same row by using the axis = 1 parameter as shown below:

sales.min(numeric_only = True, axis = 1)

Here’s our series – representing the lowest value per row.

0    187
1    211
2    364
3    345
dtype: int64

Minimum between column and number

Let us now assume that we need to compare a value in a Pandas column or Series with a constant number. The easiest way here is to use numpy np.minimum function. In our case we will compare the Q2 series vs a fixed cost constant.

import numpy as np
fixed_cost = 340
sales['max_cost_rev'] = np.minimum(sales['Q2'], fixed_cost)

Note: in case that you encounter errors importing numpy, read this tutorial.

Difference between a min and a max of a column

Now we would like to calculate the range between each of our DataFrame rows maximum value and the minimal one:

sales['diff_min_max'] = sales.max(numeric_only=True , axis=1) - sales.min(numeric_only=True , axis=1)

And the result will be: