Bird
Raised Fist0
Pandasdata~5 mins

Binning with cut() and qcut() in Pandas

Choose your learning style10 modes available
Introduction

Binning helps group continuous numbers into categories. It makes data easier to understand and analyze.

You want to turn ages into groups like 'young', 'middle', 'old'.
You need to split sales amounts into low, medium, and high ranges.
You want to create equal-sized groups from test scores.
You want to simplify data for charts by grouping values.
You want to find patterns by grouping continuous data.
Syntax
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.

Examples
This cuts ages into groups based on fixed bins: 20-30, 30-40, etc.
Pandas
import pandas as pd
ages = [22, 25, 47, 35, 46, 55]
bins = [20, 30, 40, 50, 60]
categories = pd.cut(ages, bins)
print(categories)
This splits scores into 3 groups with roughly equal number of items.
Pandas
import pandas as pd
scores = [55, 89, 76, 45, 92, 67, 88]
quantiles = pd.qcut(scores, 3)
print(quantiles)
Sample Program

This program shows how to group ages into categories using fixed ranges with cut() and equal-sized groups with qcut().

Pandas
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)
OutputSuccess
Important Notes

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.

Summary

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

(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