📖 Scenario: You work in a small bookstore. You have data about customers' favorite book genres and their preferred reading time (Morning, Afternoon, Evening). You want to understand how many customers prefer each genre at different times of the day.
🎯 Goal: Create a cross-tabulation table using pandas.crosstab() to show the count of customers for each combination of Genre and ReadingTime.
📋 What You'll Learn
Create a pandas DataFrame with the exact data provided.
Create a variable for the column names to use in crosstab.
Use pandas.crosstab() with the specified columns.
Print the resulting cross-tabulation table.
💡 Why This Matters
🌍 Real World
Cross-tabulation helps businesses understand relationships between categories, like customer preferences by time or location.
💼 Career
Data analysts and scientists use crosstab to summarize and explore categorical data quickly for reports and decision-making.
Progress0 / 4 steps
1
Create the customer data DataFrame
Create a pandas DataFrame called df with these exact columns and values: CustomerID: [1, 2, 3, 4, 5, 6, 7, 8] Genre: ['Fiction', 'Non-Fiction', 'Fiction', 'Sci-Fi', 'Non-Fiction', 'Sci-Fi', 'Fiction', 'Sci-Fi'] ReadingTime: ['Morning', 'Afternoon', 'Evening', 'Morning', 'Evening', 'Afternoon', 'Morning', 'Evening']
Data Analysis Python
Hint
Use pd.DataFrame() with a dictionary where keys are column names and values are lists of data.
2
Set the columns for crosstab
Create a list called columns with the exact values ['Genre', 'ReadingTime'] to specify the columns to use in the crosstab.
Data Analysis Python
Hint
Just assign the list ['Genre', 'ReadingTime'] to the variable columns.
3
Create the cross-tabulation table
Use pandas.crosstab() with df[columns[0]] as rows and df[columns[1]] as columns. Store the result in a variable called cross_tab.
Data Analysis Python
Hint
Use pd.crosstab(df[columns[0]], df[columns[1]]) to create the table.
4
Print the cross-tabulation table
Print the variable cross_tab to display the cross-tabulation table.
Data Analysis Python
Hint
Use print(cross_tab) to show the table.
Practice
(1/5)
1. What does the pd.crosstab() function do in data analysis?
easy
A. It sorts data in ascending order.
B. It counts how often categories from two variables appear together.
C. It calculates the average of numerical columns.
D. It removes missing values from the dataset.
Solution
Step 1: Understand the purpose of crosstab()
The function pd.crosstab() is used to count occurrences of combinations of categories from two variables.
Step 2: Compare with other options
Sorting, averaging, and removing missing values are different functions, not related to crosstab.
Final Answer:
It counts how often categories from two variables appear together. -> Option B
Quick Check:
Cross-tabulation = counts of category pairs [OK]
Hint: Remember: crosstab counts category pairs, not calculations [OK]
Common Mistakes:
Thinking crosstab sorts data
Confusing crosstab with aggregation functions
Assuming crosstab cleans data
2. Which of the following is the correct syntax to create a cross-tabulation table using pandas?
easy
A. pd.crosstab(index=df['AgeGroup'], columns=df['Gender'])
B. pd.crosstab(df.Gender, columns='AgeGroup')
C. pd.crosstab(columns=df['Gender'], index=df['AgeGroup'])
D. pd.crosstab(df['Gender'], df['AgeGroup'])
Solution
Step 1: Recall the correct parameter order for crosstab()
The function pd.crosstab() takes the first argument as the row variable and the second as the column variable, both as Series or arrays.
Step 2: Check each option
pd.crosstab(df['Gender'], df['AgeGroup']) correctly passes two Series without naming parameters. pd.crosstab(index=df['AgeGroup'], columns=df['Gender']) uses named parameters with row and column variables reversed. pd.crosstab(df.Gender, columns='AgeGroup') passes a string literal instead of a Series for the columns parameter. pd.crosstab(columns=df['Gender'], index=df['AgeGroup']) swaps index and columns incorrectly.
Final Answer:
pd.crosstab(df['Gender'], df['AgeGroup']) -> Option D
Quick Check:
Use positional args: rows, columns [OK]
Hint: Use positional args: first is rows, second is columns [OK]
A. The DataFrame is missing a column named 'Result'.
B. The index parameter should be a list, not a Series.
C. The columns parameter should be a Series, not a string.
D. The crosstab function requires numeric data only.
Solution
Step 1: Check the columns argument in crosstab()
The columns argument must be a Series or array representing categories, not a string literal.
Step 2: Identify the error in the code
Here, columns='Result' is a string, not df['Result']. This causes crosstab to treat it incorrectly.
Final Answer:
The columns parameter should be a Series, not a string. -> Option C
Quick Check:
Columns must be Series, not string [OK]
Hint: Pass Series for index and columns, not strings [OK]
Common Mistakes:
Passing column name as string instead of Series
Assuming crosstab needs numeric data
Confusing index and columns parameters
5. You have a DataFrame with columns 'Department' and 'Satisfaction' (values: 'High', 'Medium', 'Low'). You want to find how many employees in each department have each satisfaction level, but only show departments with at least 3 employees total. Which code correctly does this?
hard
A. ct = pd.crosstab(df['Department'], df['Satisfaction'])
ct = ct[ct.sum(axis=1) >= 3]
B. ct = pd.crosstab(index=df['Satisfaction'], columns=df['Department'])
ct = ct[ct.sum(axis=0) >= 3]
C. ct = pd.crosstab(df['Department'], df['Satisfaction'])
ct = ct[ct.sum(axis=0) >= 3]
D. ct = pd.crosstab(index=df['Department'], columns=df['Satisfaction'])
ct = ct[ct.sum(axis=1) < 3]
Solution
Step 1: Create crosstab with Department as rows and Satisfaction as columns
Use pd.crosstab(df['Department'], df['Satisfaction']) to count satisfaction levels per department.
Step 2: Filter departments with total employees >= 3
Sum counts across columns (axis=1) for each department, then keep rows where sum >= 3.