How to Calculate Percentage Change in Pandas

Fariba Laiq Mar 13, 2025 Pandas
  1. Method 1: Using the pct_change() Function
  2. Method 2: Calculating Percentage Change Manually
  3. Method 3: Using GroupBy for Percentage Change
  4. Conclusion
  5. FAQ
How to Calculate Percentage Change in Pandas

Calculating percentage change is an essential task in data analysis, particularly when you’re working with time series data. Whether you’re analyzing stock prices, sales figures, or any other sequential data, understanding how values change over time can provide valuable insights. In this tutorial, we will explore how to calculate percentage change in a Pandas DataFrame. By the end, you’ll be equipped with the knowledge to apply these techniques to your datasets seamlessly.

Pandas is a powerful library in Python that makes data manipulation and analysis easy and efficient. With just a few lines of code, you can compute the percentage change of your data, helping you make informed decisions based on trends and patterns. Let’s dive into the methods for calculating percentage change in Pandas, complete with clear examples and explanations.

Method 1: Using the pct_change() Function

The most straightforward way to calculate percentage change in a Pandas DataFrame is by using the built-in pct_change() function. This function computes the percentage change between the current and a prior element. By default, it calculates the change between consecutive rows, but you can also specify a different period.

Here’s how you can use it:

import pandas as pd

data = {'Year': [2020, 2021, 2022],
        'Sales': [1000, 1500, 1200]}
df = pd.DataFrame(data)

df['Percentage Change'] = df['Sales'].pct_change() * 100
print(df)

Output:

   Year  Sales  Percentage Change
0  2020   1000                NaN
1  2021   1500               50.0
2  2022   1200              -20.0

In this example, we first create a DataFrame with years and corresponding sales figures. The pct_change() function is then applied to the ‘Sales’ column. The result is multiplied by 100 to convert it into a percentage format. The first row returns NaN because there is no previous value to compare with. The second row shows a 50% increase from 1000 to 1500, while the third row indicates a 20% decrease from 1500 to 1200. This method is efficient and easy to implement, making it a go-to choice for calculating percentage changes.

Method 2: Calculating Percentage Change Manually

While the pct_change() function is convenient, you might sometimes want to calculate percentage change manually. This approach can give you more control and flexibility, especially when dealing with specific conditions or custom calculations.

Here’s how you can manually calculate the percentage change:

import pandas as pd

data = {'Year': [2020, 2021, 2022],
        'Sales': [1000, 1500, 1200]}
df = pd.DataFrame(data)

df['Percentage Change'] = ((df['Sales'] - df['Sales'].shift(1)) / df['Sales'].shift(1)) * 100
print(df)

Output:

   Year  Sales  Percentage Change
0  2020   1000                NaN
1  2021   1500               50.0
2  2022   1200              -20.0

In this example, we manually calculate the percentage change using a formula. The formula subtracts the previous sales value (using shift(1)) from the current sales value, divides it by the previous sales value, and then multiplies by 100 to convert it to a percentage. The output is the same as the previous method, but this approach allows for more customization. You can easily modify the formula to account for specific scenarios or add conditions to filter the data as needed.

Method 3: Using GroupBy for Percentage Change

Sometimes, your data might be grouped by categories, and you want to calculate the percentage change within those groups. The groupby() function in Pandas works well in conjunction with pct_change() to achieve this. This method is particularly useful when analyzing data segmented by different variables, such as product categories or regions.

Here’s how to apply this technique:

import pandas as pd

data = {'Category': ['A', 'A', 'B', 'B'],
        'Year': [2020, 2021, 2020, 2021],
        'Sales': [1000, 1500, 1200, 1800]}
df = pd.DataFrame(data)

df['Percentage Change'] = df.groupby('Category')['Sales'].pct_change() * 100
print(df)

Output:

  Category  Year  Sales  Percentage Change
0        A  2020   1000                NaN
1        A  2021   1500               50.0
2        B  2020   1200                NaN
3        B  2021   1800               50.0

In this example, we have a DataFrame with sales data for two categories, A and B, across two years. We use groupby('Category') to group the data by category and then apply pct_change() to the ‘Sales’ column. The resulting percentage change is calculated within each category. The output shows that both categories experienced a 50% increase from 2020 to 2021, but the percentage change for the first row is NaN since there’s no prior value for comparison. This method is powerful for analyzing trends within subgroups of data.

Conclusion

Calculating percentage change in a Pandas DataFrame is a straightforward yet essential skill for data analysis. Whether you use the built-in pct_change() function, calculate it manually, or apply it within grouped data, these methods provide you with the tools needed to derive meaningful insights from your datasets. By mastering these techniques, you can enhance your data analysis skills and make more informed decisions based on your findings.

FAQ

  1. How does the pct_change() function work in Pandas?
    The pct_change() function calculates the percentage change between the current and a previous element in a DataFrame or Series.

  2. Can I calculate percentage change for specific periods?
    Yes, you can specify a period using the periods parameter in the pct_change() function.

  3. What happens if there are missing values in my data?
    Missing values will result in NaN for the percentage change calculation, as there is no prior value to compare.

  4. Is it possible to calculate percentage change for grouped data?
    Yes, you can use the groupby() function in combination with pct_change() to calculate percentage changes within groups.

  5. Can I customize the formula for percentage change?
    Absolutely! You can manually calculate percentage change using custom formulas to meet your specific requirements.

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Author: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn