Bird
Raised Fist0
Pandasdata~10 mins

crosstab() for cross-tabulation in Pandas - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a cross-tabulation table between 'Gender' and 'Preference'.

Pandas
import pandas as pd

data = {'Gender': ['Male', 'Female', 'Female', 'Male'], 'Preference': ['A', 'B', 'A', 'B']}
df = pd.DataFrame(data)

result = pd.crosstab(df['Gender'], df[[1]])
print(result)
Drag options to blanks, or click blank then click option'
A'Preference'
B'Gender'
C'Age'
D'Score'
Attempts:
3 left
💡 Hint
Common Mistakes
Using the same column for both arguments.
Using a column name that does not exist in the DataFrame.
2fill in blank
medium

Complete the code to add margins (totals) to the cross-tabulation table.

Pandas
import pandas as pd

data = {'Team': ['A', 'B', 'A', 'B'], 'Result': ['Win', 'Lose', 'Lose', 'Win']}
df = pd.DataFrame(data)

ct = pd.crosstab(df['Team'], df['Result'], [1]=True)
print(ct)
Drag options to blanks, or click blank then click option'
Amargins
Btotals
Cadd_totals
Dinclude_margins
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect parameter names like 'totals' or 'include_margins'.
Forgetting to set the parameter to True.
3fill in blank
hard

Fix the error in the code to correctly compute the cross-tabulation of 'City' and 'Category'.

Pandas
import pandas as pd

data = {'City': ['NY', 'LA', 'NY', 'LA'], 'Category': ['Food', 'Food', 'Tech', 'Tech']}
df = pd.DataFrame(data)

ct = pd.crosstab(df.City, df.[1])
print(ct)
Drag options to blanks, or click blank then click option'
ACategories
B'Category'
Ccategory
DCategory
Attempts:
3 left
💡 Hint
Common Mistakes
Using quotes inside attribute access like df.'Category'.
Using wrong capitalization for column names.
4fill in blank
hard

Fill both blanks to create a normalized cross-tabulation table showing row proportions.

Pandas
import pandas as pd

data = {'Group': ['X', 'Y', 'X', 'Y'], 'Outcome': ['Pass', 'Fail', 'Fail', 'Pass']}
df = pd.DataFrame(data)

ct = pd.crosstab(df[[1]], df[[2]], normalize='index')
print(ct)
Drag options to blanks, or click blank then click option'
A'Group'
B'Outcome'
C'Pass'
D'Fail'
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping the row and column variables.
Using values instead of column names.
5fill in blank
hard

Fill all three blanks to create a cross-tabulation table with margins and specify the aggregation function to count unique 'UserID's.

Pandas
import pandas as pd

data = {'UserID': [1, 2, 1, 3, 2], 'Product': ['A', 'A', 'B', 'B', 'A'], 'Region': ['East', 'West', 'East', 'West', 'East']}
df = pd.DataFrame(data)

ct = pd.crosstab(df[[1]], df[[2]], values=df[[3]], aggfunc='nunique', margins=True)
print(ct)
Drag options to blanks, or click blank then click option'
A'Region'
B'Product'
C'UserID'
D'User'
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect column names or values.
Forgetting to set margins=True.

Practice

(1/5)
1. What does the pandas.crosstab() function primarily do?
easy
A. Filters rows based on a condition
B. Sorts data in ascending order
C. Counts how often values from two columns appear together
D. Calculates the mean of numerical columns

Solution

  1. Step 1: Understand the purpose of crosstab()

    The crosstab() function creates a table showing frequency counts of combinations of values from two or more columns.
  2. Step 2: Compare with other options

    Sorting, calculating mean, and filtering are different operations not done by crosstab().
  3. Final Answer:

    Counts how often values from two columns appear together -> Option C
  4. Quick Check:

    crosstab() = frequency count [OK]
Hint: Remember: crosstab counts pairs of values [OK]
Common Mistakes:
  • Confusing crosstab with sorting or filtering
  • Thinking crosstab calculates averages
  • Assuming crosstab modifies original data
2. Which of the following is the correct syntax to create a crosstab of columns 'A' and 'B' from DataFrame df?
easy
A. pd.crosstab(df.A, df.B, axis=1)
B. pd.crosstab(df['A'], df['B'])
C. df.crosstab('A', 'B')
D. pd.crosstab(df['A', 'B'])

Solution

  1. Step 1: Recall correct crosstab syntax

    The correct syntax is pd.crosstab(df['A'], df['B']) where you pass two series as arguments.
  2. Step 2: Identify incorrect options

    pd.crosstab(df.A, df.B, axis=1) wrongly uses axis parameter; df.crosstab('A', 'B') tries to call crosstab as a DataFrame method which doesn't exist; pd.crosstab(df['A', 'B']) passes a tuple incorrectly.
  3. Final Answer:

    pd.crosstab(df['A'], df['B']) -> Option B
  4. Quick Check:

    pd.crosstab(series1, series2) = correct syntax [OK]
Hint: Use pd.crosstab(series1, series2) syntax [OK]
Common Mistakes:
  • Calling crosstab as a DataFrame method
  • Passing multiple columns as a tuple incorrectly
  • Using wrong parameters like axis
3. Given the DataFrame:
import pandas as pd
data = {'Gender': ['M', 'F', 'F', 'M', 'F'], 'Preference': ['Tea', 'Coffee', 'Tea', 'Coffee', 'Tea']}
df = pd.DataFrame(data)

What is the output of pd.crosstab(df['Gender'], df['Preference'])?
medium
A. Preference Coffee Tea Gender F 1 2 M 1 1
B. Preference Coffee Tea Gender F 2 1 M 1 1
C. Preference Coffee Tea Gender F 1 1 M 2 1
D. Preference Coffee Tea Gender F 1 2 M 2 0

Solution

  1. Step 1: Count occurrences for each Gender and Preference

    For 'F': Coffee appears once, Tea appears twice. For 'M': Coffee appears once, Tea appears once.
  2. Step 2: Construct the crosstab table

    Rows are Gender (F, M), columns are Preference (Coffee, Tea), with counts filled accordingly.
  3. Final Answer:

    Preference Coffee Tea Gender F 1 2 M 1 1 -> Option A
  4. Quick Check:

    Count values by groups = Preference Coffee Tea Gender F 1 2 M 1 1 [OK]
Hint: Count each group pair carefully for crosstab [OK]
Common Mistakes:
  • Mixing up row and column labels
  • Counting values incorrectly
  • Assuming missing pairs have counts > 0
4. What is wrong with this code snippet?
import pandas as pd
data = {'A': ['x', 'y', 'x'], 'B': ['p', 'q', 'p']}
df = pd.DataFrame(data)
result = pd.crosstab(df['A'], df['B'], margins=True, margin_name='Total')
print(result)

It raises an error. Why?
medium
A. The print statement is missing parentheses
B. You cannot use margins=True with crosstab
C. The DataFrame columns must be numeric for crosstab
D. The parameter name should be margins_name, not margin_name

Solution

  1. Step 1: Check parameter names for crosstab()

    The correct parameter to name the totals row/column is margins_name, not margin_name.
  2. Step 2: Identify the cause of error

    Using margin_name causes a TypeError because it's an unexpected keyword argument.
  3. Final Answer:

    The parameter name should be margins_name, not margin_name -> Option D
  4. Quick Check:

    Correct parameter is margins_name [OK]
Hint: Use margins_name, not margin_name for totals [OK]
Common Mistakes:
  • Misspelling parameter names
  • Thinking crosstab requires numeric columns
  • Forgetting parentheses in print (Python 3)
5. You have a DataFrame df with columns 'City', 'Product', and 'Sales'. You want to create a crosstab showing total sales for each city-product pair. Which code correctly achieves this?
hard
A. pd.crosstab(df['City'], df['Product'], values=df['Sales'], aggfunc='sum')
B. pd.crosstab(df['City'], df['Product'], values='Sales', aggfunc='sum')
C. pd.crosstab(df['City'], df['Product'], aggfunc='sum')
D. pd.crosstab(df['City'], df['Product'], values=df['Sales'])

Solution

  1. Step 1: Understand crosstab with aggregation

    To aggregate values like sales, use values= with the column and aggfunc= with the aggregation function.
  2. Step 2: Check each option

    pd.crosstab(df['City'], df['Product'], values=df['Sales'], aggfunc='sum') correctly passes the sales column and sum function. pd.crosstab(df['City'], df['Product'], values='Sales', aggfunc='sum') passes a string instead of a series for values. pd.crosstab(df['City'], df['Product'], aggfunc='sum') misses values parameter. pd.crosstab(df['City'], df['Product'], values=df['Sales']) misses aggfunc, so it defaults to count.
  3. Final Answer:

    pd.crosstab(df['City'], df['Product'], values=df['Sales'], aggfunc='sum') -> Option A
  4. Quick Check:

    Use values= and aggfunc= for aggregation [OK]
Hint: Use values=column and aggfunc='sum' for totals [OK]
Common Mistakes:
  • Passing column name as string instead of series
  • Omitting aggfunc for aggregation
  • Expecting crosstab to sum without values parameter
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