Python Pandas and Numpy - Concatenate multiindex into single index

To concatenate a multiindex into a single index in Pandas, we can use the map() method with join() to combine tuple elements with a separator. Let us start by importing the required libraries ?

Import Libraries

import pandas as pd
import numpy as np

Creating a Series with Tuple Index

First, we create a Pandas Series with tuples as index values ?

# Create tuples for multiindex
index_tuples = [('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West'), 
                ('Scarlett', 'South'), ('Jacob', 'West'), ('Scarlett', 'North')]

# Create Series with tuple index
series_data = pd.Series(np.arange(1, 7), index=index_tuples)
print("Original Series with tuple index:")
print(series_data)
Original Series with tuple index:
(Jacob, North)       1
(Ami, East)          2
(Ami, West)          3
(Scarlett, South)    4
(Jacob, West)        5
(Scarlett, North)    6
dtype: int64

Concatenating Multiindex into Single Index

Use the map() method with '_'.join to concatenate the tuple elements ?

import pandas as pd
import numpy as np

# Create Series with tuple index
index_tuples = [('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West'), 
                ('Scarlett', 'South'), ('Jacob', 'West'), ('Scarlett', 'North')]

series_data = pd.Series(np.arange(1, 7), index=index_tuples)

# Map and join to create single index
single_index = series_data.index.map('_'.join)
print("Result after mapping:")
print(single_index)
Result after mapping:
Index(['Jacob_North', 'Ami_East', 'Ami_West', 'Scarlett_South', 'Jacob_West',
       'Scarlett_North'],
      dtype='object')

Creating New Series with Single Index

You can also create a new Series with the concatenated index ?

import pandas as pd
import numpy as np

# Original Series with tuple index
index_tuples = [('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West'), 
                ('Scarlett', 'South'), ('Jacob', 'West'), ('Scarlett', 'North')]

series_data = pd.Series(np.arange(1, 7), index=index_tuples)

# Create new Series with concatenated index
new_series = pd.Series(series_data.values, index=series_data.index.map('_'.join))
print("New Series with single concatenated index:")
print(new_series)
New Series with single concatenated index:
Jacob_North       1
Ami_East          2
Ami_West          3
Scarlett_South    4
Jacob_West        5
Scarlett_North    6
dtype: int64

Different Separator Options

You can use different separators for concatenation ?

import pandas as pd
import numpy as np

index_tuples = [('Jacob', 'North'), ('Ami', 'East'), ('Ami', 'West')]
series_data = pd.Series([1, 2, 3], index=index_tuples)

# Different separators
dash_separator = series_data.index.map('-'.join)
dot_separator = series_data.index.map('.'.join)
pipe_separator = series_data.index.map('|'.join)

print("Dash separator:", dash_separator.tolist())
print("Dot separator:", dot_separator.tolist())
print("Pipe separator:", pipe_separator.tolist())
Dash separator: ['Jacob-North', 'Ami-East', 'Ami-West']
Dot separator: ['Jacob.North', 'Ami.East', 'Ami.West']
Pipe separator: ['Jacob|North', 'Ami|East', 'Ami|West']

Conclusion

Use index.map('_'.join) to concatenate multiindex tuples into single string indices. This method is efficient and allows custom separators for different formatting needs.

Updated on: 2026-03-26T02:01:08+05:30

592 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements