Bird
Raised Fist0
Pandasdata~20 mins

Binning with cut() and qcut() in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Binning Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of pandas cut() with custom bins
What is the output of the following code snippet?
Pandas
import pandas as pd
import numpy as np

values = pd.Series([1, 7, 5, 4, 6, 3])
bins = [0, 3, 6, 9]
categories = pd.cut(values, bins)
print(categories.value_counts().to_dict())
A{'(0, 3]': 2, '(3, 6]': 2, '(6, 9]': 2}
B{'(0, 3]': 1, '(3, 6]': 4, '(6, 9]': 1}
C{'(0, 3]': 3, '(3, 6]': 2, '(6, 9]': 1}
D{'(0, 3]': 2, '(3, 6]': 3, '(6, 9]': 1}
Attempts:
2 left
💡 Hint
Remember that cut() bins are right-inclusive by default.
❓ data_output
intermediate
2:00remaining
Number of bins created by qcut() with duplicates
Given the following code, how many unique bins does qcut() create?
Pandas
import pandas as pd
values = pd.Series([1, 2, 2, 3, 4, 5, 6, 7, 8, 9])
categories = pd.qcut(values, 4, duplicates='drop')
print(categories.cat.categories)
A2
B4
C3
D5
Attempts:
2 left
💡 Hint
qcut tries to create equal-sized bins but drops duplicates in bin edges.
🔧 Debug
advanced
2:00remaining
Identify the error in this cut() usage
What error does the following code raise?
Pandas
import pandas as pd
values = pd.Series([1, 2, 3, 4, 5])
bins = [0, 2, 4]
categories = pd.cut(values, bins, labels=["Low", "Medium", "High"])
print(categories)
AValueError: Bin labels must be one fewer than the number of bin edges
BTypeError: labels must be a list of strings
CIndexError: list index out of range
DNo error, prints categories with labels
Attempts:
2 left
💡 Hint
Check the number of labels vs number of bins.
❓ visualization
advanced
2:00remaining
Interpreting qcut() bin edges from output
Given this code, which option correctly describes the bin edges printed?
Pandas
import pandas as pd
values = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
categories = pd.qcut(values, 5)
print(categories.cat.categories)
ABins split data into 4 groups with equal counts
BBins split data into 5 equal-sized groups by value ranges with edges at 10, 28, 46, 64, 82, 100
CBins split data into 5 equal-width intervals from 10 to 100
DBins split data into 5 groups but edges are arbitrary and not quantiles
Attempts:
2 left
💡 Hint
qcut creates bins with equal number of data points, edges are quantiles.
🚀 Application
expert
3:00remaining
Choosing binning method for skewed data
You have a dataset with highly skewed income values. You want to create 4 bins that each contain roughly the same number of people. Which method and parameters should you use?
AUse pandas qcut() with 4 bins and duplicates='drop'
BUse pandas cut() with 4 equal-width bins
CUse pandas cut() with custom bins based on income quantiles
DUse pandas qcut() with 4 bins and labels=False
Attempts:
2 left
💡 Hint
Think about how to get bins with equal counts despite skew.

Practice

(1/5)
1. What is the main difference between pandas.cut() and pandas.qcut()?
easy
A. cut() creates bins with fixed ranges; qcut() creates bins with equal counts.
B. cut() sorts data; qcut() filters data.
C. cut() works only on integers; qcut() works only on floats.
D. cut() creates equal-sized bins; qcut() creates fixed range bins.

Solution

  1. Step 1: Understand cut() behavior

    cut() divides data into bins with fixed numeric ranges you specify.
  2. Step 2: Understand qcut() behavior

    qcut() divides data into bins so that each bin has roughly the same number of data points.
  3. Final Answer:

    cut() creates bins with fixed ranges; qcut() creates bins with equal counts. -> Option A
  4. Quick Check:

    Fixed ranges vs equal counts = C [OK]
Hint: Remember: cut = fixed ranges, qcut = equal-sized groups [OK]
Common Mistakes:
  • Confusing fixed ranges with equal counts
  • Thinking qcut sorts data instead of binning
  • Assuming cut only works on integers
2. Which of the following is the correct syntax to create 3 equal-width bins from a pandas Series data using cut()?
easy
A. pd.cut(data, bins=3)
B. pd.qcut(data, bins=3)
C. pd.cut(data, q=3)
D. pd.qcut(data, q=3)

Solution

  1. Step 1: Recall cut() syntax

    cut() uses the parameter bins to specify the number of equal-width bins.
  2. Step 2: Identify correct usage

    Using pd.cut(data, bins=3) creates 3 fixed-width bins.
  3. Final Answer:

    pd.cut(data, bins=3) -> Option A
  4. Quick Check:

    cut with bins=3 = B [OK]
Hint: cut(): bins=N (equal width); qcut(): bins=N (equal count) [OK]
Common Mistakes:
  • Using q parameter with cut()
  • Confusing cut() and qcut() syntax
  • Using bins parameter with qcut()
3. Given the code:
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?
medium
A. ['(0, 25]', '(0, 25]', '(25, 50]', '(25, 50]', 'NaN']
B. ['[0, 25)', '[0, 25)', '[25, 50)', '[25, 50)', '[25, 50)']
C. ['(0, 25]', '(0, 25]', '(25, 50]', '(25, 50]', '(50, 75]']
D. ['(0, 25]', '(0, 25]', '(25, 50]', '(25, 50]', '(25, 50]']

Solution

  1. 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.
  2. Step 2: Assign values to bins

    10, 20 in (0, 25]; 30, 40, 50 in (25, 50].
  3. Final Answer:

    ['(0, 25]', '(0, 25]', '(25, 50]', '(25, 50]', '(25, 50]'] -> Option D
  4. Quick Check:

    Bins match values = A [OK]
Hint: Check bin edges and which side is inclusive [OK]
Common Mistakes:
  • Confusing inclusive side of intervals
  • Assuming last bin includes values >50
  • Using wrong interval notation
4. What is wrong with this code snippet?
import pandas as pd
values = [1, 2, 3, 4, 5]
bins = pd.qcut(values, bins=3)
print(bins)
medium
A. No error; code runs correctly.
B. Values list must be a pandas Series, not a list.
C. Using 'bins' parameter with qcut causes an error.
D. qcut requires numeric bins, not number of bins.

Solution

  1. Step 1: Check qcut parameters

    qcut() accepts q=int or q=array-like to specify quantiles. The parameter bins is not valid for qcut().
  2. Step 2: Verify code runs

    The code uses bins=3 which is invalid for qcut() and will raise a TypeError.
  3. Final Answer:

    Using 'bins' parameter with qcut causes an error. -> Option C
  4. Quick Check:

    qcut uses q= for quantiles, bins= invalid = D [OK]
Hint: qcut uses q= for quantile count, not bins= [OK]
Common Mistakes:
  • Thinking bins= invalid for qcut()
  • Believing input must be Series
  • Confusing parameter requirements
5. You have a DataFrame column 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?
hard
A. df['grade_bins'] = pd.cut(df['scores'], bins=4)
B. df['grade_bins'] = pd.qcut(df['scores'], q=4)
C. df['grade_bins'] = pd.cut(df['scores'], q=4)
D. df['grade_bins'] = pd.qcut(df['scores'], bins=4)

Solution

  1. Step 1: Understand goal

    Roughly equal students per group -> equal counts -> qcut().
  2. Step 2: Choose correct function and parameters

    qcut(df['scores'], q=4) creates 4 equal-count bins. The parameter bins does not exist for qcut().
  3. Final Answer:

    df['grade_bins'] = pd.qcut(df['scores'], q=4) -> Option B
  4. Quick Check:

    Equal counts need qcut q=4 = A [OK]
Hint: qcut(..., q=N) for N equal-count groups [OK]
Common Mistakes:
  • Using cut() for equal-sized groups
  • Confusing bins and nonexistent q parameters
  • Using q= with qcut()
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