axis=0 means select rows, axis=1 means select columns.
Examples
Selects rows where the index label is 'label'.
Pandas
df.xs('label')
Selects columns where the column label is 'label'.
Pandas
df.xs('label', axis=1)
Selects data at level 1 of a multi-level index with label 'label'.
Pandas
df.xs('label', level=1)
Sample Program
This code creates a DataFrame with two levels in the index: 'letter' and 'number'. Using xs(), it selects all rows where the 'letter' level is 'A'.
Pandas
import pandas as pd
# Create a DataFrame with multi-level index
index = pd.MultiIndex.from_tuples([
('A', 1), ('A', 2), ('B', 1), ('B', 2)
], names=['letter', 'number'])
data = {'value': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=index)
# Use xs to select all rows where letter is 'A'
result = df.xs('A', level='letter')
print(result)
OutputSuccess
Important Notes
If you use drop_level=True (default), the selected level is removed from the index in the result.
You can use xs() on columns by setting axis=1.
Summary
xs() helps pick data by label from rows or columns.
It works well with multi-level indexes to select cross-sections easily.
Remember to specify the level if your index has multiple levels.
Practice
(1/5)
1. What does the xs() method do in pandas?
easy
A. Removes duplicate rows from the DataFrame.
B. Sorts the DataFrame by index values.
C. Selects data by label from rows or columns, especially in multi-index DataFrames.
D. Converts DataFrame to a NumPy array.
Solution
Step 1: Understand the purpose of xs()
xs() is used to select data by label from rows or columns, especially useful for multi-index DataFrames.
Step 2: Compare with other options
Sorting, removing duplicates, or converting to arrays are different methods and not related to xs().
Final Answer:
Selects data by label from rows or columns, especially in multi-index DataFrames. -> Option C
Quick Check:
xs() = select by label [OK]
Hint: Remember: xs() picks data by label from multi-index [OK]
Common Mistakes:
Confusing xs() with sorting methods
Thinking xs() removes duplicates
Assuming xs() converts data formats
2. Which of the following is the correct syntax to select the cross-section labeled 'B' from the first level of a multi-index DataFrame df using xs()?
easy
A. df.xs('B', level=0)
B. df.xs(level=0, 'B')
C. df.xs('B', axis=1)
D. df.xs('B', level=1)
Solution
Step 1: Recall xs() syntax
The correct syntax is df.xs(key, level=level_number) where key is the label and level is the index level.
Step 2: Match the label and level
To select label 'B' from level 0, use df.xs('B', level=0). Other options have wrong argument order or wrong level.
Final Answer:
df.xs('B', level=0) -> Option A
Quick Check:
xs(key, level=0) = correct syntax [OK]
Hint: Use xs('label', level=level_number) for multi-index [OK]
Common Mistakes:
Swapping arguments order in xs()
Using wrong level number
Confusing axis parameter with level
3. Given the following DataFrame df with a multi-index:
import pandas as pd
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)])
data = {'Value': [10, 20, 30, 40]}
df = pd.DataFrame(data, index=index)
print(df.xs('B', level=0))
What is the output?
medium
A. Value
1 30
2 40
B. Value
0 30
1 40
C. Value 70
Name: B, dtype: int64
D. KeyError: 'B'
Solution
Step 1: Understand the DataFrame structure
The DataFrame has a multi-index with levels: first level 'A' or 'B', second level 1 or 2, and values 10, 20, 30, 40.
Step 2: Apply xs('B', level=0)
This selects all rows where the first index level is 'B', returning rows with second level 1 and 2 and their values.
Final Answer:
Value
1 30
2 40 -> Option A
Quick Check:
xs('B', level=0) returns rows with first index 'B' [OK]
Hint: xs() filters rows by label at specified level [OK]
Common Mistakes:
Expecting sum instead of filtered rows
Confusing index levels
Mistaking output format
4. Consider this code snippet:
import pandas as pd
index = pd.MultiIndex.from_tuples([('X', 'a'), ('X', 'b'), ('Y', 'a')])
data = {'Score': [5, 10, 15]}
df = pd.DataFrame(data, index=index)
result = df.xs('a')
print(result)
What is the issue with this code?
medium
A. It works fine and prints the rows with second level 'a'.
B. It returns all rows because xs() without level selects all.
C. It returns only the first row incorrectly.
D. It raises a KeyError because level is not specified in xs().
Solution
Step 1: Check the multi-index levels
The DataFrame has two index levels: first level 'X' or 'Y', second level 'a' or 'b'.
Step 2: Understand xs() without level
Calling xs('a') without specifying level causes pandas to look for 'a' in the outermost level, which does not exist, raising a KeyError.
Final Answer:
It raises a KeyError because level is not specified in xs(). -> Option D
Quick Check:
xs() needs level for multi-index [OK]
Hint: Always specify level in xs() for multi-index to avoid errors [OK]
Common Mistakes:
Assuming xs() guesses the level automatically
Expecting xs() to return partial matches
Ignoring the need for level parameter
5. You have a DataFrame df with a three-level index: ['Country', 'Year', 'City']. You want to select all data for the year 2020 regardless of country or city. Which xs() call will achieve this?
hard
A. df.xs('Year', level=2020)
B. df.xs(2020, level='Year')
C. df.xs(2020, level='City')
D. df.xs('2020', level='Year')
Solution
Step 1: Identify the index level for selection
The index levels are 'Country', 'Year', and 'City'. We want to select by the 'Year' level with value 2020.
Step 2: Use xs() with correct key and level
Use df.xs(2020, level='Year') to select all rows where 'Year' is 2020. Other options have wrong argument order, wrong level, or wrong data type.
Final Answer:
df.xs(2020, level='Year') -> Option B
Quick Check:
xs(value, level='Year') selects year 2020 [OK]
Hint: Use xs(value, level='LevelName') to select multi-index slices [OK]
Common Mistakes:
Swapping level and key arguments
Using string '2020' instead of integer 2020
Selecting wrong index level
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.