Bird
Raised Fist0
Pandasdata~20 mins

Setting columns as MultiIndex in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
MultiIndex Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this code when setting MultiIndex columns?

Consider the following pandas DataFrame and code that sets MultiIndex columns. What will be the output of print(df.columns)?

Pandas
import pandas as pd

cols = [('A', 'foo'), ('A', 'bar'), ('B', 'baz')]
df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=pd.MultiIndex.from_tuples(cols))
print(df.columns)
AIndex(['A', 'foo', 'A', 'bar', 'B', 'baz'], dtype='object')
BMultiIndex([('A', 'foo'), ('A', 'bar'), ('B', 'baz')], )
CMultiIndex([('foo', 'A'), ('bar', 'A'), ('baz', 'B')], )
DIndex(['foo', 'bar', 'baz'], dtype='object')
Attempts:
2 left
💡 Hint

Look at how pd.MultiIndex.from_tuples creates a MultiIndex from a list of tuples.

❓ data_output
intermediate
1:30remaining
How many columns does the DataFrame have after setting MultiIndex columns?

Given the code below, how many columns does the DataFrame df have?

Pandas
import pandas as pd

arrays = [['one', 'one', 'two', 'two'], ['A', 'B', 'A', 'B']]
cols = pd.MultiIndex.from_arrays(arrays, names=['level_1', 'level_2'])
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], columns=cols)
print(len(df.columns))
A2
B1
C8
D4
Attempts:
2 left
💡 Hint

Count the number of tuples in the MultiIndex columns.

🔧 Debug
advanced
2:00remaining
What error does this code raise when setting MultiIndex columns incorrectly?

What error will this code raise?

import pandas as pd
cols = [('A', 'foo'), ('B',)]
df = pd.DataFrame([[1, 2], [3, 4]], columns=pd.MultiIndex.from_tuples(cols))
AValueError: All tuples must be the same length
BTypeError: Cannot create MultiIndex from tuples
CIndexError: tuple index out of range
DNo error, runs successfully
Attempts:
2 left
💡 Hint

Check if all tuples have the same length when creating MultiIndex.

❓ visualization
advanced
2:30remaining
Which option correctly creates a DataFrame with MultiIndex columns and displays it?

Which code snippet will create a DataFrame with MultiIndex columns and display it correctly?

A
import pandas as pd
cols = pd.MultiIndex.from_arrays([['X', 'X', 'Y'], ['a', 'b']])
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=cols)
print(df)
B
import pandas as pd
cols = pd.Index([('X', 'a'), ('X', 'b'), ('Y', 'a')])
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=cols)
print(df)
C
import pandas as pd
cols = pd.MultiIndex.from_tuples([('X', 'a'), ('X', 'b'), ('Y', 'a')])
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=cols)
print(df)
D
import pandas as pd
cols = [('X', 'a'), ('X', 'b'), ('Y', 'a')]
df = pd.DataFrame([[1,2,3],[4,5,6]], columns=cols)
print(df)
Attempts:
2 left
💡 Hint

Check how MultiIndex is created and that arrays have matching lengths.

🚀 Application
expert
2:00remaining
After setting MultiIndex columns, what is the value at ('B', 'two') for row 1?

Given the DataFrame below, what is the value at the column ('B', 'two') for the second row (index 1)?

Pandas
import pandas as pd

arrays = [['A', 'A', 'B', 'B'], ['one', 'two', 'one', 'two']]
cols = pd.MultiIndex.from_arrays(arrays)
data = [[10, 20, 30, 40], [50, 60, 70, 80]]
df = pd.DataFrame(data, columns=cols)
value = df.loc[1, ('B', 'two')]
print(value)
A80
B70
C60
D40
Attempts:
2 left
💡 Hint

Look at the column labels and the row index carefully.

Practice

(1/5)
1. What is the main purpose of setting columns as a MultiIndex in a pandas DataFrame?
easy
A. To sort columns alphabetically
B. To convert columns into rows
C. To remove duplicate columns
D. To organize columns with multiple header levels for better grouping

Solution

  1. Step 1: Understand MultiIndex columns

    MultiIndex columns allow multiple levels of headers, grouping related columns together.
  2. Step 2: Identify the purpose

    This organization helps in better data analysis and clarity by grouping related columns under common headers.
  3. Final Answer:

    To organize columns with multiple header levels for better grouping -> Option D
  4. Quick Check:

    MultiIndex = multiple header levels [OK]
Hint: MultiIndex groups columns under multiple headers [OK]
Common Mistakes:
  • Confusing MultiIndex with row indexing
  • Thinking MultiIndex removes duplicates
  • Assuming MultiIndex sorts columns automatically
2. Which of the following is the correct syntax to set MultiIndex columns from a list of tuples cols in pandas?
easy
A. df.columns = pd.MultiIndex.from_tuples(cols)
B. df.columns = pd.MultiIndex(cols)
C. df.columns = MultiIndex.from_tuples(cols)
D. df.columns = pd.MultiIndex.tuples(cols)

Solution

  1. Step 1: Recall the correct method

    The pandas method to create MultiIndex from tuples is pd.MultiIndex.from_tuples().
  2. Step 2: Match syntax

    Assigning df.columns = pd.MultiIndex.from_tuples(cols) correctly sets MultiIndex columns.
  3. Final Answer:

    df.columns = pd.MultiIndex.from_tuples(cols) -> Option A
  4. Quick Check:

    Use from_tuples() to create MultiIndex [OK]
Hint: Use pd.MultiIndex.from_tuples() to set MultiIndex columns [OK]
Common Mistakes:
  • Using pd.MultiIndex() directly without from_tuples
  • Missing pd prefix for MultiIndex
  • Using a non-existent method like tuples()
3. Given the code:
import pandas as pd
cols = [('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')]
data = [[1, 2, 3, 4], [5, 6, 7, 8]]
df = pd.DataFrame(data)
df.columns = pd.MultiIndex.from_tuples(cols)
print(df)

What will be the output?
medium
A. A DataFrame with MultiIndex columns showing levels 'A' and 'B' with sub-levels 'one' and 'two'
B. A DataFrame with single-level columns named 0,1,2,3
C. A DataFrame with columns named ('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two') as strings
D. SyntaxError due to incorrect MultiIndex assignment

Solution

  1. Step 1: Create MultiIndex columns

    The list cols contains tuples representing two levels: first level 'A' or 'B', second level 'one' or 'two'.
  2. Step 2: Assign MultiIndex to df.columns

    Using pd.MultiIndex.from_tuples(cols) sets these tuples as hierarchical column headers.
  3. Final Answer:

    A DataFrame with MultiIndex columns showing levels 'A' and 'B' with sub-levels 'one' and 'two' -> Option A
  4. Quick Check:

    MultiIndex columns display hierarchical headers [OK]
Hint: MultiIndex columns show grouped headers from tuples [OK]
Common Mistakes:
  • Expecting flat column names instead of MultiIndex
  • Confusing tuple strings with MultiIndex tuples
  • Assuming syntax error without checking code
4. What is wrong with this code snippet for setting MultiIndex columns?
import pandas as pd
data = [[1, 2], [3, 4]]
df = pd.DataFrame(data)
cols = [('X', 'a'), ('Y', 'b')]
df.columns = pd.MultiIndex(cols)
medium
A. The list cols should be a list of strings, not tuples
B. DataFrame data shape does not match columns length
C. pd.MultiIndex() cannot take a list of tuples directly; use from_tuples()
D. MultiIndex columns must be set during DataFrame creation

Solution

  1. Step 1: Check MultiIndex creation method

    The code uses pd.MultiIndex(cols), but this constructor does not accept a list of tuples directly.
  2. Step 2: Correct method usage

    The correct way is to use pd.MultiIndex.from_tuples(cols) to create MultiIndex from tuples.
  3. Final Answer:

    pd.MultiIndex() cannot take a list of tuples directly; use from_tuples() -> Option C
  4. Quick Check:

    Use from_tuples() to create MultiIndex from tuples [OK]
Hint: Use from_tuples() to create MultiIndex from tuple list [OK]
Common Mistakes:
  • Using pd.MultiIndex() directly with tuples
  • Ignoring error messages about constructor arguments
  • Trying to set MultiIndex columns without matching data shape
5. You have sales data for two regions and two products:
data = [[100, 200, 150, 250], [110, 210, 160, 260]]
cols = [('Region1', 'ProductA'), ('Region1', 'ProductB'), ('Region2', 'ProductA'), ('Region2', 'ProductB')]
df = pd.DataFrame(data)
How do you set the columns as a MultiIndex to group products under regions, and then select all sales for Region1?
hard
A. Set columns with pd.MultiIndex.from_product(cols) and select with df.loc[:, 'Region1']
B. Set columns with pd.MultiIndex.from_tuples(cols) and select with df.loc[:, 'Region1']
C. Set columns with pd.MultiIndex.from_tuples(cols) and select with df['Region1']
D. Set columns with pd.MultiIndex.from_tuples(cols) and select with df['ProductA']

Solution

  1. Step 1: Set MultiIndex columns correctly

    Use pd.MultiIndex.from_tuples(cols) to create MultiIndex with regions as first level and products as second.
  2. Step 2: Select all sales for Region1

    Use df.loc[:, 'Region1'] to select all columns under the 'Region1' level.
  3. Final Answer:

    Set columns with pd.MultiIndex.from_tuples(cols) and select with df.loc[:, 'Region1'] -> Option B
  4. Quick Check:

    Use from_tuples() and df.loc[:, region] to select [OK]
Hint: Use from_tuples() and df.loc[:, region] to select grouped columns [OK]
Common Mistakes:
  • Using from_product() instead of from_tuples()
  • Selecting columns with df['Region1'] which may fail for MultiIndex
  • Selecting wrong level like 'ProductA' instead of region
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard