Функция Pandas pd.cut()

Pandas 通用函数Pandas: общие функции


pd.cut()— используемая в библиотеке Pandas дляразбиения непрерывных данных (Binning)функция. Она делит числовые данные на дискретные категории согласно заданным интервалам и очень подходит для групповой статистики и визуализации в анализе данных.

Операции разбиения на интервалы очень распространены в анализе данных, например разделение возраста на «подросток», «средний возраст», «пожилой» или разделение баллов на «неудовлетворительно», «удовлетворительно», «хорошо», «отлично» и т. д.

Значение слова: cutЭто означает «cut». Здесь имеется в виду «разрезание» непрерывного интервала данных на несколько дискретных интервалов.


Базовый синтаксис и параметры

pd.cut()— это функция верхнего уровня библиотеки Pandas, используемая для дискретизации непрерывных переменных.

Формат синтаксиса

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

Описание параметра

  • Параметр: x
    • Тип: объект, подобный массиву, например list, Series, array и т. д.
    • Описание: непрерывные числовые данные, подлежащие разбиению на интервалы.
  • Параметр: bins
    • Тип: целое число, скаляр (границы интервалов) или IntervalIndex.
    • Описание: метод разбиения. Это может быть целое число (указывающее, на сколько интервалов равной ширины разбить) или список (задающий конкретные границы интервалов).
  • Параметр: right
    • Тип: логическое значение.
    • Описание: использовать ли интервалы, замкнутые справа. По умолчаниюTrue(т. е. в форме [a, b]). Если установлено значениеFalse, то это левозамкнутый правооткрытый интервал (a, b].
  • Параметр: labels
    • Тип: Array или None.
    • Описание: задать пользовательские метки для каждого интервала. Если не указано, используются представления интервалов, такие как "(0, 10]".
  • Параметр: retbins
    • Тип: логическое значение.
    • Описание: ЕслиTrue, результат будет содержать границы интервалов. По умолчаниюFalse。
  • Параметр: include_lowest
    • Тип: логическое значение.
    • Описание: ЕслиTrue, первый интервал содержит левую границу. По умолчаниюFalse。

Описание функций

  • Возвращаемое значение: Возвращает Series типа Categorical, где каждое значение соответствует интервалу, к которому оно принадлежит.
  • Эффект: Отображает непрерывные числовые значения в дискретные категории (интервалы).

Пример

Давайте подробно разберём на серии примеров от простого к сложному,pd.cut()использование.

Пример 1: Базовое использование — разбиение на интервалы равной ширины

Пример

import pandas as pd
import numpy as np

# 1. Создание числовых данных
scores = pd.Series([55, 70, 82, 45, 90, 65, 78, 88, 92, 58])

print("=== Исходные баллы ===")
print(scores)

# 2. Разделите баллы на 3 интервала равной ширины
result = pd.cut(scores, bins=3)
print("\n=== pd.cut(scores, bins=3) разбиение на интервалы равной ширины ===)
print(result)

# 3. Просмотр границ интервалов
result_bins = pd.cut(scores, bins=3, retbins=True)
print("\n=== Возвращаемые границы интервалов ===)
print(f"Границы интервалов: {result_bins)

Ожидаемый вывод:

=== 原始分数 ===
0    55
1    70
2    82
3    45
4    90
5    65
6    78
7    88
8    92
9    58

=== pd.cut(scores, bins=3) 等宽分箱 ===
0    (44.667, 60.667]
1    (60.667, 76.333]
2    (76.333, 92.0]
3    (44.667, 60.667]
4    (76.333, 92.0]
5    (60.667, 76.333]
6    (60.667, 76.333]
7    (76.333, 92.0]
8    (76.333, 92.0]
9    (44.667, 60.667]
dtype: category
Categories (3, interval[float64]): [(44.667, 60.667] < (60.667, 76.333] < (76.333, 92.0]

=== 返回分箱边界 ===
分箱边界: [44.667 60.667 76.333 92.   ]

Пояснение к коду:

  1. bins=3Указывает, что данные автоматически разбиваются на 3 интервала равной ширины.
  2. Pandas автоматически вычисляет границы интервалов на основе минимального и максимального значений данных.
  3. Возвращаемое значение имеет тип Categorical, а каждое значение является объектом Interval.
  4. По умолчанию используются правосторонне замкнутые интервалы, т. е. в форме (a, b].

Пример 2: Пользовательские границы интервалов

В практических приложениях нам часто нужно настраивать границы интервалов в соответствии с бизнес-требованиями.

Пример

import pandas as pd
import numpy as np

# Создание данных оценок
scores = pd.Series([55, 70, 82, 45, 90, 65, 78, 88, 92, 58, 73, 67, 81, 49, 95])

# Пользовательские границы интервалов: Fail, Pass, Good, Excellent
bins = [0, 60, 75, 90, 100]
labels = ['Fail', 'Pass', 'Good', 'Отличное']

result = pd.cut(scores, bins=bins, labels=labels, include_lowest=True)

print("=== Исходные баллы ===")
print(scores.values)
print("\n=== Результат разбиения по интервалам ===)
print(result)

# Подсчитать количество человек в каждой оценке
print("\n=== Статистика распределения оценок ===)
print(result.value_counts().sort_index())

Ожидаемый вывод:

=== 原始成绩
[55 70 82 45 90 65 78 88 92 58 73 67 81 49 95]

=== 分箱结果
0     及格
1     良好
2     良好
3    不及格
4     优秀
...
12    良好
13    不及格
14     优秀
dtype: category
Categories (4, interval[int64]): [不及格 < 及格 < 良好 < 优秀]

=== 成绩分布统计
不及格     3
及格       4
良好       5
优秀       3
dtype: int64

Пояснение к коду:

  • bins=[0, 60, 75, 90, 100]Определено 4 интервала: [0-60], (60-75], (75-90], (90-100]
  • labelsПараметр labels задаёт интуитивно понятные китайские метки для каждого интервала
  • include_lowest=TrueУбедитесь, что первый интервал содержит левую границу 0
  • value_counts()Позволяет легко подсчитать количество человек в каждой оценке

Пример 3: Использование интервалов, замкнутых справа/слева

Пример

import pandas as pd
import numpy as np

# Тестовые данные
data = pd.Series([10, 20, 30, 40, 50])

# По умолчанию интервал замкнут справа [a, b]
result1 = pd.cut(data, bins=4)
print("=== Интервал по умолчанию, замкнутый справа [a, b] ===")
print(result1)

# Интервал, замкнутый слева и открытый справа (a, b]
result2 = pd.cut(data, bins=4, right=False)
print("\n=== Интервал, замкнутый слева и открытый справа (a, b] ===)
print(result2)

Ожидаемый вывод:

=== 默认右闭区间 [a, b]
0     (7.5, 17.5]
1    (17.5, 27.5]
2    (27.5, 37.5]
3    (37.5, 47.5]
4    (47.5, 57.5]
dtype: category

=== 左闭右开区间 (a, b]
0    [10, 17.5)
1    [17.5, 27.5)
2    [27.5, 37.5)
3    [37.5, 47.5)
4    [47.5, 57.5)
dtype: category

Пояснение к коду:

  • По умолчанию используется интервал, замкнутый справа[a, b], т. е. включает правую границу
  • Setright=Falseчтобы перейти к интервалу, замкнутому слева и открытому справа[a, b)
  • Режим открытости/замкнутости интервала влияет на классификацию граничных значений.

Примечания

Важные замечания:

  • Если в данных есть значения, которые превышаютbinsзаданный диапазон, будет сгенерировано NaNNaN
  • binsграницы должны быть монотонно возрастающими
  • При использовании пользовательских меток количество меток должно быть на единицу меньше количества границ.
  • Результат разбиения на интервалы имеет тип Categorical и может обрабатываться с помощью строковых методов.

Python math 模块Pandas: общие функции

Другие расширения