Cross-tabulation helps us see how two or more groups relate by counting how often their values appear together. It is like making a simple table to compare categories.
Cross-tabulation with crosstab() in Data Analysis Python
import pandas as pd # Create a cross-tabulation table pd.crosstab(index=data['Column1'], columns=data['Column2'], margins=False, normalize=False)
index is the row variable (categories for rows).
columns is the column variable (categories for columns).
import pandas as pd # Example data colors = ['Red', 'Blue', 'Red', 'Green', 'Blue'] shapes = ['Circle', 'Square', 'Square', 'Circle', 'Circle'] # Cross-tabulation pd.crosstab(index=colors, columns=shapes)
import pandas as pd # Empty data colors = [] shapes = [] # Cross-tabulation on empty lists pd.crosstab(index=colors, columns=shapes)
import pandas as pd # Single element data colors = ['Red'] shapes = ['Circle'] # Cross-tabulation with one element pd.crosstab(index=colors, columns=shapes)
import pandas as pd # Data with one category in columns colors = ['Red', 'Red', 'Red'] shapes = ['Circle', 'Circle', 'Circle'] # Cross-tabulation pd.crosstab(index=colors, columns=shapes)
This program shows how many males and females prefer each fruit. It prints the original data and then the cross-tabulation table.
import pandas as pd # Sample data: survey of favorite fruit by gender survey_data = { 'Gender': ['Male', 'Female', 'Female', 'Male', 'Female', 'Male', 'Male'], 'FavoriteFruit': ['Apple', 'Banana', 'Apple', 'Banana', 'Apple', 'Apple', 'Banana'] } # Create DataFrame survey_df = pd.DataFrame(survey_data) print('Original DataFrame:') print(survey_df) # Create cross-tabulation table fruit_gender_crosstab = pd.crosstab(index=survey_df['Gender'], columns=survey_df['FavoriteFruit']) print('\nCross-tabulation of Gender and Favorite Fruit:') print(fruit_gender_crosstab)
Time complexity is O(n), where n is the number of rows in the data.
Space complexity depends on the number of unique categories in the index and columns.
Common mistake: forgetting to pass the correct columns as index and columns, leading to confusing tables.
Use crosstab() when you want to count occurrences between categories. For more complex statistics, consider pivot tables.
Cross-tabulation counts how often categories from two variables appear together.
Use pd.crosstab() with index and columns to create the table.
It helps compare groups easily and understand relationships in data.
Practice
pd.crosstab() function do in data analysis?Solution
Step 1: Understand the purpose of crosstab()
The functionpd.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 BQuick Check:
Cross-tabulation = counts of category pairs [OK]
- Thinking crosstab sorts data
- Confusing crosstab with aggregation functions
- Assuming crosstab cleans data
Solution
Step 1: Recall the correct parameter order for crosstab()
The functionpd.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 DQuick Check:
Use positional args: rows, columns [OK]
- Swapping index and columns parameters
- Mixing positional and named arguments incorrectly
- Passing DataFrame instead of Series
import pandas as pd
data = {'Color': ['Red', 'Blue', 'Red', 'Green', 'Blue', 'Green'],
'Shape': ['Circle', 'Square', 'Square', 'Circle', 'Circle', 'Square']}
df = pd.DataFrame(data)
print(pd.crosstab(df['Color'], df['Shape']))What is the output?
Solution
Step 1: Count occurrences of each Color-Shape pair
From the data:
- Blue: Circle(1), Square(1)
- Green: Circle(1), Square(1)
- Red: Circle(1), Square(1)Step 2: Construct the crosstab table
Each color has one Circle and one Square, so the table shows 1 for each pair.Final Answer:
Shape Circle Square Color Blue 1 1 Green 1 1 Red 1 1 -> Option AQuick Check:
Count pairs correctly = Shape Circle Square Color Blue 1 1 Green 1 1 Red 1 1 [OK]
- Miscounting pairs
- Swapping rows and columns
- Ignoring repeated categories
import pandas as pd
data = {'Team': ['A', 'B', 'A', 'B'], 'Result': ['Win', 'Lose', 'Lose', 'Win']}
df = pd.DataFrame(data)
ct = pd.crosstab(index=df['Team'], columns='Result')
print(ct)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 CQuick Check:
Columns must be Series, not string [OK]
- Passing column name as string instead of Series
- Assuming crosstab needs numeric data
- Confusing index and columns parameters
'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?Solution
Step 1: Create crosstab with Department as rows and Satisfaction as columns
Usepd.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.Final Answer:
ct = pd.crosstab(df['Department'], df['Satisfaction']) ct = ct[ct.sum(axis=1) >= 3] -> Option AQuick Check:
Filter rows by sum(axis=1) >= 3 [OK]
- Filtering columns instead of rows
- Swapping index and columns in crosstab
- Using wrong axis in sum()
Ready to prove it?
Pass the test and this pattern moves unknown
