【Kaggle】pandas数据分箱之pd.cut()
发布网友
发布时间:2024-09-30 15:33
我来回答
共1个回答
热心网友
时间:2024-11-22 06:58
在进行数据处理工作时,我们常常会遇到需要对连续型数值进行分档的需求。例如,对销售员的销售业绩进行分档,如未完成任务、完成任务、超额完成任务等。为了实现这一目标,我们需要首先对销售业绩的数值进行判断,然后根据判断结果进行分类。实际上,这需要对连续型数值进行分箱操作。实现分箱的方法有很多种,但效率各有高低。在这里,我们介绍一种效率较高且易于理解的方法,即使用DataFrame中的pd.cut()函数进行分箱操作。
pd.cut()函数的参数介绍
首先,让我们来看一下pd.cut()函数包含哪些参数,以及每个参数的含义和作用。
x:一维数组,对应前文提到的销售业绩。
bins:整数、标量序列或间隔索引,是进行分组的依据。
right:布尔值,默认为True,表示包含最右侧的数值。
labels:数组或布尔值,可选。指定分箱的标签。
retbins:是否显示分箱的分界值。默认为False。当bins取整数时,可以设置retbins=True以显示分界值,得到划分后的区间。
precision:整数,默认3,存储和显示分箱标签的精度。
include_lowest:布尔值,表示区间的左边是开还是闭,默认为false,即不包含区间左边。
plicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一。
pd.cut()代码示例
以下是一个pd.cut()函数的代码示例:
先来看一下数据源df_f = pd.read_excel(r"D:\data\football\球队排名比分2019.xlsx"),df_f读入的数据是2019年英超各球队的积分:
进行分箱,bins取整数,即指定箱子个数。
分箱结果:直接指定箱子个数,分成等宽的3份,感兴趣的同学可以求一下每个箱子内的极值,应该是约相等的。
前文提到,这种分箱方式看不到分界值是多少,但是可以通过参数进行设置显示分界值:
分箱结果:与上一次代码结果相比,多了一个array([13.953, 29.66666667, 45.33333333, 61.]),这就是分箱的分界值,我们就能知道分箱的时候是以那个数值作为分界点进行分箱的了。
如果不指定每个箱子的标签是什么:
分享结果:只显示每个位置上的数值属于第几个箱子。
bins取标量序列:指定分箱时候的分界点,即0~30,30~40,40~70一共三个箱体,有默认的right=True,即分箱的时候,30包含在0~30的箱体中,40包含在30~40的箱体中,70包含在40~70的箱体中,我们来看下结果,是不是和描述一致:
这里红框部分是要和下文更改参数right后的结果进行对比的,我们来看下:
分箱结果:能够看到,right参数设置对分箱结果的影响。为什么会有这样的影响呢?我们回顾下我们的原数据:
能够发现分界发生变化的数值正好是我们分箱的临界值,可以通过参数进行设置临界值被划分到哪一边的箱体中。
如果需要将分箱的结果展示在原数据框中,直接赋值一列进去就可以了:
结果如下: