📖 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
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.
Step 2: Compare with other options
Sorting, calculating mean, and filtering are different operations not done by crosstab().
Final Answer:
Counts how often values from two columns appear together -> Option C
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
Step 1: Recall correct crosstab syntax
The correct syntax is pd.crosstab(df['A'], df['B']) where you pass two series as arguments.
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.
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
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.
Step 2: Construct the crosstab table
Rows are Gender (F, M), columns are Preference (Coffee, Tea), with counts filled accordingly.
Final Answer:
Preference Coffee Tea
Gender
F 1 2
M 1 1 -> Option A
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
Step 1: Check parameter names for crosstab()
The correct parameter to name the totals row/column is margins_name, not margin_name.
Step 2: Identify the cause of error
Using margin_name causes a TypeError because it's an unexpected keyword argument.
Final Answer:
The parameter name should be margins_name, not margin_name -> Option D
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
Step 1: Understand crosstab with aggregation
To aggregate values like sales, use values= with the column and aggfunc= with the aggregation function.
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.
Final Answer:
pd.crosstab(df['City'], df['Product'], values=df['Sales'], aggfunc='sum') -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.