How to Flatten MultiIndex in Pandas?
In this article, we will discuss how to flatten multiIndex in pandas.
Flatten all levels of MultiIndex:
In this method, we are going to flat all levels of the dataframe by using the reset_index() function.
Syntax:
dataframe.reset_index(inplace=True)
Note: Dataframe is the input dataframe, we have to create the dataframe MultiIndex.
Syntax:
MultiIndex.from_tuples([(tuple1),.......,(tuple n),names=[column_names])
Arguments:
- tuples are the values
- column names are the names of columns in each tuple value
Example:
In this example, we will create a dataframe along with multiIndex and display it in the python programming language.
import pandas as pd
# create DataFrame multiIndex
data = pd.MultiIndex.from_tuples([('Web Programming', 'php', 'sub1'),
('Scripting', 'python', 'sub2'),
('networks', 'computer network', 'sub3'),
('architecture', 'computer organization', 'sub4'),
('coding', 'java', 'sub5')],
names=['Course', 'Subject name', 'subject id'])
# create dataframe with student marks
data = pd.DataFrame({'ravi': [98, 89, 90, 88, 93],
'reshma': [78, 89, 80, 98, 63],
'sahithi': [78, 89, 80, 98, 63]},
index=data)
# display
data
Output:
Now, we will flatten the index of all levels:
import pandas as pd
# create DataFrame multiIndex
data = pd.MultiIndex.from_tuples([('Web Programming', 'php', 'sub1'),
('Scripting', 'python', 'sub2'),
('networks', 'computer network', 'sub3'),
('architecture', 'computer organization', 'sub4'),
('coding', 'java', 'sub5')],
names=['Course', 'Subject name', 'subject id'])
# create dataframe with student marks
data = pd.DataFrame({'ravi': [98, 89, 90, 88, 93],
'reshma': [78, 89, 80, 98, 63],
'sahithi': [78, 89, 80, 98, 63]},
index=data)
# flatten the index of all levels
data.reset_index(inplace=True)
# display
data
Output:
Flatten specific levels of MultiIndex
By using specific levels we can get by using the following syntax:
dataframe.reset_index(inplace=True,level=['level_name'])
where
- dataframe is the input dataframe
- level_name is the name of the multiindex level
Example:
In this example, we will create a dataframe and flatten specific levels of multiIndex and display it in the python programming language.
import pandas as pd
# create DataFrame multiIndex
data = pd.MultiIndex.from_tuples([('Web Programming', 'php', 'sub1'),
('Scripting', 'python', 'sub2'),
('networks', 'computer network', 'sub3'),
('architecture', 'computer organization', 'sub4'),
('coding', 'java', 'sub5')],
names=['Course', 'Subject name', 'subject id'])
# create dataframe with student marks
data = pd.DataFrame({'ravi': [98, 89, 90, 88, 93],
'reshma': [78, 89, 80, 98, 63],
'sahithi': [78, 89, 80, 98, 63]},
index=data)
# flatten the index of level with course column
data.reset_index(inplace=True, level=['Course'])
# display
data
Output:
We can also specify multiple levels;
import pandas as pd
# create DataFrame multiIndex
data = pd.MultiIndex.from_tuples([('Web Programming', 'php', 'sub1'),
('Scripting', 'python', 'sub2'),
('networks', 'computer network', 'sub3'),
('architecture', 'computer organization', 'sub4'),
('coding', 'java', 'sub5')],
names=['Course', 'Subject name', 'subject id'])
# create dataframe with student marks
data = pd.DataFrame({'ravi': [98, 89, 90, 88, 93],
'reshma': [78, 89, 80, 98, 63],
'sahithi': [78, 89, 80, 98, 63]},
index=data)
# flatten the index of level with course
# and subject id columns
data.reset_index(inplace=True, level=['Course', 'subject id'])
# display
data
Output:
Using to_records() method
This is a pandas module method used to convert multiindex dataframe into each record and display.
Syntax:
dataframe.to_records()
Example:
import pandas as pd
# create DataFrame multiIndex
data = pd.MultiIndex.from_tuples([('Web Programming', 'php', 'sub1'),
('Scripting', 'python', 'sub2'),
('networks', 'computer network', 'sub3'),
('architecture', 'computer organization', 'sub4'),
('coding', 'java', 'sub5')],
names=['Course', 'Subject name', 'subject id'])
# create dataframe with student marks
data = pd.DataFrame({'ravi': [98, 89, 90, 88, 93],
'reshma': [78, 89, 80, 98, 63],
'sahithi': [78, 89, 80, 98, 63]},
index=data)
pd.DataFrame(data.to_records())
Output: