看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pd.qcut()
是 Pandas 中的一个函数,用于将一维数据按等分位数划分为若干组(区间或类别)。与 pd.cut()
不同,pd.qcut()
会根据数据的实际分布,保证每个分组包含大致相同数量的数据点,非常适合数据分布不均的情况下使用。
pd.qcut()
可以用于以下数据类型:
ndarray
或 list
)pandas.qcut(
x,
q,
labels=None,
retbins=False,
precision=3,
duplicates='raise'
)
x
(必选)
list
、ndarray
、Series
等。q
(必选)
q
个等分位区间(例如,q=4
分成四分位数)。[0, 0.25, 0.5, 0.75, 1]
)。labels
(可选,默认为 None
)
False
,返回区间编号(从 0 开始)。None
,返回默认的区间(如 (a, b]
格式)。retbins
(可选,默认为 False
)
True
,则返回分箱结果和分箱边界。precision
(可选,默认为 3
)
duplicates
(可选,默认为 'raise'
)
'raise'
:抛出异常。'drop'
:忽略重复边界。labels
为 False
,返回一个整数的 Series
。labels
为 None
或自定义标签,返回一个 Categorical
类型的对象。retbins=True
,返回一个元组:import pandas as pd
import numpy as np
# 示例数据
data = np.random.randint(1, 101, 20) # 生成 20 个随机数,范围 [1, 100]
print("示例数据:", data)
按四分位数分箱:
result = pd.qcut(data, q=4)
print("分箱结果:")
print(result)
输出示例:
分箱结果:
[(67.25, 90.0], (26.0, 67.25], ..., (67.25, 90.0]]
Categories (4, interval[float64, right]): [(0.999, 26.0] < (26.0, 67.25] < (67.25, 90.0] < (90.0, 100.0]]
说明:
(a, b]
格式的区间。将数据按分位点 [0, 0.25, 0.5, 0.75, 1.0]
划分:
result, bins = pd.qcut(data, q=[0, 0.25, 0.5, 0.75, 1.0], retbins=True)
print("分箱结果:", result)
print("分箱边界:", bins)
输出示例:
分箱结果: [(67.25, 90.0], (26.0, 67.25], ..., (90.0, 100.0]]
分箱边界: [ 1. 26. 67.25 90. 100. ]
为每个区间分配标签:
labels = ['Low', 'Medium', 'High', 'Very High']
result = pd.qcut(data, q=4, labels=labels)
print("带标签的分箱结果:")
print(result)
输出示例:
带标签的分箱结果:
['Very High', 'Medium', ..., 'High']
Categories (4, object): ['Low' < 'Medium' < 'High' < 'Very High']
返回区间编号而非区间:
result = pd.qcut(data, q=4, labels=False)
print("区间编号:")
print(result)
输出示例:
区间编号:
[3, 1, ..., 2]
如果分位点重复,可以通过 duplicates='drop'
忽略重复:
data_with_duplicates = [1, 2, 2, 3, 4, 5, 5, 5, 6, 7]
result = pd.qcut(data_with_duplicates, q=4, duplicates='drop')
print("处理重复边界后的结果:")
print(result)
pd.qcut
的核心特性是按数据的分布等分区间,每个区间的数据量大致相等。如果有更复杂的需求(如结合其他分箱方法或数据清洗),可以进一步扩展!
更新时间:2024-12-07 09:08:41 标签:pandas python 分箱