Binning helps group continuous numbers into categories. It makes data easier to understand and analyze.
Binning with cut() and qcut() in Pandas
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False) pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
cut() divides data into fixed intervals you define.
qcut() divides data into equal-sized groups based on data distribution.
import pandas as pd ages = [22, 25, 47, 35, 46, 55] bins = [20, 30, 40, 50, 60] categories = pd.cut(ages, bins) print(categories)
import pandas as pd scores = [55, 89, 76, 45, 92, 67, 88] quantiles = pd.qcut(scores, 3) print(quantiles)
This program shows how to group ages into categories using fixed ranges with cut() and equal-sized groups with qcut().
import pandas as pd # Sample data: ages ages = [18, 22, 27, 35, 42, 48, 55, 60, 70, 75] # Using cut() to create age groups with fixed bins bins = [0, 25, 50, 75] age_groups = pd.cut(ages, bins, labels=['Young', 'Middle-aged', 'Senior']) print('Age groups with cut():') print(age_groups) # Using qcut() to create 3 equal-sized groups age_quantiles = pd.qcut(ages, 3, labels=['Low', 'Medium', 'High']) print('\nAge groups with qcut():') print(age_quantiles)
With cut(), bins must cover all data values or some values become NaN.
qcut() may fail if there are many duplicate values at bin edges; use duplicates='drop' to fix.
Labels help name groups but are optional; if omitted, intervals are shown.
cut() groups data into fixed ranges you choose.
qcut() groups data into equal-sized buckets based on data distribution.
Binning makes continuous data easier to analyze and visualize.
Practice
pandas.cut() and pandas.qcut()?Solution
Step 1: Understand
cut()behaviorcut()divides data into bins with fixed numeric ranges you specify.Step 2: Understand
qcut()behaviorqcut()divides data into bins so that each bin has roughly the same number of data points.Final Answer:
cut()creates bins with fixed ranges;qcut()creates bins with equal counts. -> Option AQuick Check:
Fixed ranges vs equal counts = C [OK]
- Confusing fixed ranges with equal counts
- Thinking qcut sorts data instead of binning
- Assuming cut only works on integers
data using cut()?Solution
Step 1: Recall
cut()syntaxcut()uses the parameterbinsto specify the number of equal-width bins.Step 2: Identify correct usage
Usingpd.cut(data, bins=3)creates 3 fixed-width bins.Final Answer:
pd.cut(data, bins=3) -> Option AQuick Check:
cut with bins=3 = B [OK]
- Using q parameter with cut()
- Confusing cut() and qcut() syntax
- Using bins parameter with qcut()
import pandas as pd values = [10, 20, 30, 40, 50] bins = pd.cut(values, bins=[0, 25, 50]) print(bins.tolist())
What is the output?
Solution
Step 1: Understand bins parameter
The bins are [0, 25, 50], so intervals (0, 25], (25, 50]. Values <=25 in first, >25 to <=50 in second.Step 2: Assign values to bins
10, 20 in (0, 25]; 30, 40, 50 in (25, 50].Final Answer:
['(0, 25]', '(0, 25]', '(25, 50]', '(25, 50]', '(25, 50]'] -> Option DQuick Check:
Bins match values = A [OK]
- Confusing inclusive side of intervals
- Assuming last bin includes values >50
- Using wrong interval notation
import pandas as pd values = [1, 2, 3, 4, 5] bins = pd.qcut(values, bins=3) print(bins)
Solution
Step 1: Check qcut parameters
qcut()acceptsq=intorq=array-liketo specify quantiles. The parameterbinsis not valid forqcut().Step 2: Verify code runs
The code usesbins=3which is invalid forqcut()and will raise a TypeError.Final Answer:
Using 'bins' parameter with qcut causes an error. -> Option CQuick Check:
qcut uses q= for quantiles, bins= invalid = D [OK]
- Thinking bins= invalid for qcut()
- Believing input must be Series
- Confusing parameter requirements
df['scores'] with 1000 exam scores ranging from 0 to 100. You want to create 4 groups with roughly equal number of students in each group. Which code correctly creates these groups?Solution
Step 1: Understand goal
Roughly equal students per group -> equal counts ->qcut().Step 2: Choose correct function and parameters
qcut(df['scores'], q=4)creates 4 equal-count bins. The parameterbinsdoes not exist forqcut().Final Answer:
df['grade_bins'] = pd.qcut(df['scores'], q=4) -> Option BQuick Check:
Equal counts need qcut q=4 = A [OK]
- Using cut() for equal-sized groups
- Confusing bins and nonexistent q parameters
- Using q= with qcut()
Ready to prove it?
Pass the test and this pattern moves unknown
