Bird
Raised Fist0
Pandasdata~30 mins

crosstab() for cross-tabulation in Pandas - Mini Project: Build & Apply

Choose your learning style10 modes available
Using crosstab() for Cross-Tabulation in pandas
📖 Scenario: You work in a small store and have collected data about customers' gender and whether they bought a product or not. You want to see how many males and females bought or did not buy the product.
🎯 Goal: Build a simple cross-tabulation table using pandas crosstab() to count the number of customers by gender and purchase status.
📋 What You'll Learn
Create a pandas DataFrame with exact customer data
Create a variable for the DataFrame
Use pandas crosstab() with the correct columns
Print the resulting cross-tabulation table
💡 Why This Matters
🌍 Real World
Cross-tabulation helps businesses quickly see relationships between categories, like customer gender and buying behavior.
💼 Career
Data analysts and scientists use crosstab() to summarize and explore categorical data for reports and decision-making.
Progress0 / 4 steps
1
Create the customer data DataFrame
Create a pandas DataFrame called df with two columns: 'Gender' and 'Purchased'. Use these exact values: ['Male', 'Female', 'Female', 'Male', 'Female', 'Male'] for 'Gender' and ['Yes', 'No', 'Yes', 'No', 'Yes', 'Yes'] for 'Purchased'.
Pandas
Hint

Use pd.DataFrame() with a dictionary for columns.

2
Set up the cross-tabulation variable
Create a variable called cross_tab and assign it to the result of pd.crosstab() using df['Gender'] as rows and df['Purchased'] as columns.
Pandas
Hint

Use pd.crosstab() with the two DataFrame columns as arguments.

3
Print the cross-tabulation table
Print the variable cross_tab to display the cross-tabulation table.
Pandas
Hint

Use print(cross_tab) to show the table.

4
Add totals to the cross-tabulation table
Update the cross_tab variable to include row and column totals by adding margins=True inside pd.crosstab(). Then print cross_tab again.
Pandas
Hint

Add margins=True inside pd.crosstab() to get totals.

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