Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
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.
Advertisements
