3 Ways to Calculate Percent Change in Python

Percent change using Pandas is one of the easiest ways to get the percent change formula. This can be done with a single line of code. However, you will need to use a data frame from the Pandas package to do this. I will show you multiple ways to calculate percent change with ease.

Do You need Percent Change or Percent Difference

  • Percent Change: Measures the relative change between two values over time. It’s useful for tracking trends and comparing growth rates.
  • Percent Difference: Measures the absolute difference between two values as a percentage of their average. It’s used to assess the magnitude of change, especially when comparing two data points.

Before we dive into the different methods of achieve percent change. Let me give you some demo data so that you can easily practice this. We can create a simple data frame in Pandas by first using a dictionary and then wrapping it into a Pandas data frame function.

import pandas as pd

# Create a sample data frame
data = {'Date': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01'],
        'Value': [100, 110, 120, 105]}

df = pd.DataFrame(data)

Method 1: Use the pct_change() Function

Pandas provides a straightforward method for calculating percent change between consecutive rows in a column using the pct_change() method. It’s as simple as this:

Calculate percent change

df[‘PercentChange’] = df[‘Value’].pct_change() * 100

This is going to be the formula of new-old/old. Therefore, its is the literal percent change calculation that you might be used to. If you are looking for other methods such as percent difference. You might want to check out Percent Formula or skip to the end of the tutorial to see the percent difference.

Method 2: Using the Shift() Function.

The shift function is going to allow you to shift your existing data down a number of rows. This is like an offset function. So this will require you to complete the calculation above manually. In our example, we are going to 1 into the function to shift 1 row. However, you can add N to the function.

#calculate the percent change with Pandas shift
(df['Value'] -df['Value'].shift(1))/df['Vlaue'].shift(1)


# Calculate percent change with numpy 
import numpy as np
df['PercentChange'] = (np.diff(df['Value']) / df['Value'][:-1]) * 100

When and Where to Use Each Method

Each method has its strengths and can be useful in different scenarios. The pct_change() method is the most concise and is especially handy for simple percent change calculations. The shift() method provides more control when you need to manipulate the data further, while the numpy diff() method offers flexibility for more complex calculations. So the shift method will give you the opportunity to see absolute values.

Use Cases for Percent Change

  • Financial Analysis: Used to assess stock price fluctuations, analyze changes in revenue or profit margins, and monitor interest rates and inflation.
  • Sales and Marketing: Employed to evaluate changes in sales figures over time, assess the success of marketing campaigns, and analyze customer churn rates.
  • Website and App Analytics: Utilized for tracking user engagement metrics, analyzing conversion rates, and evaluating changes in website traffic.

Short Youtube Video on Percent Change

Create a User Defined Function for Percent Difference:

If you are planning to using this formula on multiple rows its probably best to turn it into a function that you can use again and again.

def percent_difference(value1, value2):
    try:
        # Calculate the percent difference
        percent_diff = abs((value1 - value2) / ((value1 + value2) / 2)) * 100
        return percent_diff
    except ZeroDivisionError:
        # Handle the case where the denominator is zero
        return "Error: Division by zero"

# modified version of this that you can apply on a data frame
def pct_diff(x):
  change = abs((df[x] - df[x].shift(1))/((df[x] +df[x].shift(1))/2))
  return change

Gaelim Holland

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments