Reshaping Data with Pivot Tables and Stacking/Unstacking


Reshaping data is a crucial task in data analysis and manipulation. It involves changing the layout or structure of the data to make it more suitable for analysis or presentation. In this article, we will discuss two popular techniques for reshaping data in Pandas: pivot tables and stacking/unstacking.

Pivot Tables

A pivot table is a powerful tool for summarizing and aggregating data, allowing us to transform a dataset from a "long" format to a "wide" format. The resulting pivot table offers a multi-dimensional view of the data, with rows representing one variable and columns representing another.

To create a pivot table in Pandas, we can use the pivot_table() function. Let's consider an example to understand this better. Suppose we have a DataFrame that contains information about sales revenue for different products and regions. The DataFrame has columns for the product name, region, and revenue.

import pandas as pd

data = {
    'Product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'Revenue': [100, 150, 200, 100, 50, 75]

df = pd.DataFrame(data)

To create a pivot table that shows the total revenue by product and region, we can use the pivot_table() function as follows:

pivot_table = df.pivot_table(values='Revenue', index='Product', columns='Region', aggfunc='sum')

This will create a new DataFrame where each row represents a unique product, each column represents a unique region, and the values represent the total revenue. Pivot tables are highly customizable, allowing us to perform various aggregations (e.g., sum, mean, median) and handle missing values.


Stacking and unstacking are operations that allow us to convert data between "wide" and "long" formats. Stacking refers to the process of pivoting the innermost column index level to the innermost row index level, while unstacking does the opposite.

To demonstrate this, let's consider a DataFrame where the columns are multi-indexed with product names and regions, and the rows represent different time periods.

data = {
    ('A', 'North'): [100, 200, 150],
    ('A', 'South'): [200, 300, 250],
    ('B', 'North'): [300, 400, 350],
    ('B', 'South'): [400, 500, 450],

df = pd.DataFrame(data, index=['Jan', 'Feb', 'Mar'])

To stack the columns, we can use the stack() function:

stacked_df = df.stack()

This will transform the DataFrame into a "long" format, where the product names and regions are stacked as rows, and the time periods are represented as a new index level. Similarly, we can use the unstack() function to reverse this operation and convert the data back to a "wide" format:

unstacked_df = stacked_df.unstack()

Stacking and unstacking are particularly useful when dealing with multi-level column indexes or when we want to switch between different data representations for analysis or visualization purposes.


Reshaping data is an essential skill for any data analyst or scientist. In this article, we explored the power of pivot tables and stacking/unstacking in Pandas for transforming data between "wide" and "long" formats. Pivot tables allow us to summarize and aggregate data effectively, while stacking and unstacking provide flexibility in handling multi-level indexes and changing data layouts. By mastering these techniques, you can gain greater control and insights over your data analysis workflows in Pandas.

noob to master © copyleft