w3resource

Pandas: Rename names of columns and specific labels of the Main Index of MultiIndex dataframe

Pandas Indexing: Exercise-15 with Solution

Write a Pandas program to rename names of columns and specific labels of the Main Index of the MultiIndex dataframe.

Sample Solution:

Python Code :

import pandas as pd 
import numpy as np
sales_arrays = [['sale1', 'sale1', 'sale2', 'sale2', 'sale3', 'sale3', 'sale4', 'sale4'],
          ['city1', 'city2', 'city1', 'city2', 'city1', 'city2', 'city1', 'city2']]
sales_tuples = list(zip(*sales_arrays))
sales_index = pd.MultiIndex.from_tuples(sales_tuples, names=['sale', 'city'])
print(sales_tuples)
print("\nConstruct a Dataframe using the said MultiIndex levels: ")
df = pd.DataFrame(np.random.randn(8, 5), index=sales_index)
print(df)
print("\nRename the columns name of the said dataframe")
df1 = df.rename(columns={0: "col1", 1: "col2", 2:"col3", 3:"col4", 4:"col5"})
print(df1)
print("\nRename specific labels of the main index of the DataFrame")
df2 = df1.rename(index={"sale2": "S2", "city2": "C2"})
print(df2)

Sample Output:

[('sale1', 'city1'), ('sale1', 'city2'), ('sale2', 'city1'), ('sale2', 'city2'), ('sale3', 'city1'), ('sale3', 'city2'), ('sale4', 'city1'), ('sale4', 'city2')]

Construct a Dataframe using the said MultiIndex levels: 
                    0         1         2         3         4
sale  city                                                   
sale1 city1 -0.846342 -0.741958  1.776873 -0.526789  0.425722
      city2 -1.191729  2.871049  1.334246 -0.555390  0.678033
sale2 city1  1.215433 -0.305873 -0.197025 -1.145550  0.367179
      city2 -1.043111 -0.054862 -0.409382 -0.781236 -1.111498
sale3 city1  0.198136 -0.092846  0.211265 -0.338316 -0.006117
      city2  1.254932  0.660553 -0.343675 -1.488751  1.141144
sale4 city1  0.440996 -1.886134 -1.705170 -0.583568 -0.094108
      city2 -0.645809 -0.979893  0.589839 -0.440143  0.032115

Rename the columns name of the said dataframe
                 col1      col2      col3      col4      col5
sale  city                                                   
sale1 city1 -0.846342 -0.741958  1.776873 -0.526789  0.425722
      city2 -1.191729  2.871049  1.334246 -0.555390  0.678033
sale2 city1  1.215433 -0.305873 -0.197025 -1.145550  0.367179
      city2 -1.043111 -0.054862 -0.409382 -0.781236 -1.111498
sale3 city1  0.198136 -0.092846  0.211265 -0.338316 -0.006117
      city2  1.254932  0.660553 -0.343675 -1.488751  1.141144
sale4 city1  0.440996 -1.886134 -1.705170 -0.583568 -0.094108
      city2 -0.645809 -0.979893  0.589839 -0.440143  0.032115

Rename specific labels of the main index of the DataFrame
                 col1      col2      col3      col4      col5
sale  city                                                   
sale1 city1 -0.846342 -0.741958  1.776873 -0.526789  0.425722
      C2    -1.191729  2.871049  1.334246 -0.555390  0.678033
S2    city1  1.215433 -0.305873 -0.197025 -1.145550  0.367179
      C2    -1.043111 -0.054862 -0.409382 -0.781236 -1.111498
sale3 city1  0.198136 -0.092846  0.211265 -0.338316 -0.006117
      C2     1.254932  0.660553 -0.343675 -1.488751  1.141144
sale4 city1  0.440996 -1.886134 -1.705170 -0.583568 -0.094108
      C2    -0.645809 -0.979893  0.589839 -0.440143  0.032115

Python Code Editor:


Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a Pandas program to extract a single row, rows and a specific value from a MultiIndex levels DataFrame.

Next: Write a Pandas program to sort a MultiIndex of a DataFrame. Also sort on various levels of index.

What is the difficulty level of this exercise?

Test your Python skills with w3resource's quiz



Python: Tips of the Day

Measure the execution time of small bits of Python code with the "timeit" module.

Example:

import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))',
number=100000))

print(timeit.timeit('"-".join([str(n) for n in range(100)])',
number=100000))

print(timeit.timeit('"-".join(map(str, range(100)))',
number=100000))

Output:

4.565344013999493
3.778259701000934
3.006161755998619