Pivoting Data Based on Multiple Columns in Python DataFrame

What will you learn?

In this tutorial, you will master the art of pivoting data based on multiple columns in a Python DataFrame. By rearranging the structure of your data effectively, you will enhance your data analysis capabilities.

Introduction to the Problem and Solution

Dealing with complex datasets often necessitates pivoting the data based on multiple columns for better analysis. This process involves transforming the data from rows to columns or vice versa. The pandas library in Python provides an efficient solution to this challenge.

To tackle this issue, we will employ the pivot_table function offered by pandas. This function enables us to specify multiple columns as index and column values, aggregating any duplicate entries as required. Understanding how this function operates empowers us to easily reorganize our dataset into a more structured form suitable for analysis.


import pandas as pd

# Sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob'],
        'Category': ['A', 'B', 'A', 'B', 'C'],
        'Value1': [10, 20, 30, 40, 50],
        'Value2': [100, 200 ,300 ,400 ,500]}

df = pd.DataFrame(data)

# Pivot based on multiple columns
pivot_df = df.pivot_table(index='Name', columns='Category', values=['Value1','Value2'], aggfunc='sum')

# Fill NaN values with 0
pivot_df.fillna(0, inplace=True)


# Copyright PHD


In the code snippet above: – We first import the pandas library as pd. – A sample DataFrame df is created with columns Name, Category, Value1 and Value2. – The pivot_table function is utilized to pivot the data based on two columns – ‘Name’ and ‘Category’, while specifying that both ‘Value1’ and ‘Value2’ should be aggregated using summation (aggfunc=’sum’). – Finally, any missing values (NaN) are filled with zero using fillna(0) method.

This approach enables us to transform our original DataFrame into a pivoted format where each unique combination of Name and Category becomes a row index in the new DataFrame.

    How does pivot_table() differ from pivot() in pandas?

    The main difference lies in flexibility; pivot_table() provides support for aggregation functions when there are multiple values per index/column pair whereas pivot() does not have this capability.

    Can we pivot data without specifying an aggregation function?

    Yes! If your data doesn’t require aggregation (e.g., no duplicate entries), you can use .set_index().unstack() method chain which essentially pivots without needing an aggregator.

    Is it possible to pivot only specific columns in a DataFrame?

    Certainly! You can pass a subset of column names inside square brackets while calling .pivot_table(), allowing you to selectively pivot only certain columns.

    What if I want different aggregation functions for different value columns during pivoting?

    You can achieve this by passing a dictionary of column names mapped to respective aggregation functions within the aggfunc={} parameter of .pivot_table() method call.

    Can I maintain hierarchical indexing after pivoting instead of flattening it out?

    Absolutely! By setting parameters like columns=[‘level_1’], you can retain multi-level column indexing after pivoting operation according to specified levels.


    Mastering the technique of pivoting based on multiple columns is crucial when working with intricate datasets that demand restructuring for efficient analysis. Leveraging pandas functionality such as pivot_table() allows us to seamlessly convert our data into a more usable format. Understanding these concepts unlocks possibilities for advanced data manipulation tasks in Python programming.

    Leave a Comment