当我们进行数据分析或统计时,经常需要对数据进行分组分析。其中一个常用的分组方法就是将数据按照指定的区间进行分组,这个功能可以通过Python中的Pandas库中的cut()方法实现。
Pandas.cut()方法可以将一组数据按照指定的区间进行分组,常见的区间类型有等宽区间、等频区间,以及自定义区间。该方法的语法如下:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)
其中,各参数的含义如下:
- x:表示要进行分组的数据;
- bins:表示指定的分组边界,可以是如下形式:
- 整数:表示将数据分成指定数量的区间;
- 序列:表示自定义分组的区间;
- 范围(tuple):表示将数据划分为指定范围的区间;
- right:表示是否包含右区间,缺省为True;
- labels:表示用于命名每个分组的标签,缺省为None;
- retbins:表示是否返回每个分组的边界值,缺省为False;
- precision:表示小数点的精度,缺省为3;
- include_lowest:表示最小值是否包含在最小分组中,缺省为False;
- duplicates:对非唯一值的处理方式,缺省为'raise';
- ordered:表示区间是否有序,缺省为True。
下面,分别以等宽分组、等频分组和自定义分组为例,详细讲解Pandas.cut()方法的使用。
等宽分组
等宽分组是将数据分成宽度相等的区间,可以通过指定每个区间的宽度实现。下面是一个示例代码,将数据分成5个等宽区间:
import pandas as pd
import numpy as np
# 生成随机数据
data = np.random.randint(0, 100, 100)
# 等宽分组
bins = pd.cut(data, 5)
# 分组结果
print(bins)
等宽分组的结果是一个Categorical类型的Series对象,其中每个元素表示对应数据所属的分组。其输出结果如下:
[(41.6, 57.8], (73.2, 89.4], (25.4, 41.6], (41.6, 57.8], (41.6, 57.8], ..., (41.6, 57.8], (89.4, 100.0], (89.4, 100.0], (25.4, 41.6], (25.4, 41.6]]
Length: 100
Categories (5, interval[float64]): [(7.911, 25.4] < (25.4, 41.6] < (41.6, 57.8] < (57.8, 73.2] < (73.2, 89.4]]
上述代码中,我们通过np.random.randint()函数生成了100个随机数,然后使用Pandas的cut()函数将数据分成了5个等宽区间。cut()函数会将data中的元素自动划分到各个区间中,并返回一个类别(Categorical)类型的Series对象。这个Series沿着一条有序线段被分成5个区间,每个区间的长度相等。
等频分组
等频分组是将数据分成各组中包含相同数量的数据,它是按相同数量的区间将数据划分,并不考虑数据分布的情况。它适用于数据分布相对均衡的场合。下面是一个例子,将数据分为5个等频区间:
import pandas as pd
import numpy as np
# 生成随机数据
data = np.random.randint(0, 100, 100)
# 等频分组
bins = pd.qcut(data, 5)
# 分组结果
print(bins)
等频分组的结果同样是一个Categorical类型的Series对象,其中每个元素表示对应数据所属的分组。其输出结果如下:
[(13.0, 42.0], (13.0, 42.0], (42.0, 54.0], (54.0, 65.0], (65.0, 89.0], ..., (54.0, 65.0], (13.0, 42.0], (42.0, 54.0], (13.0, 42.0], (42.0, 54.0]]
Length: 100
Categories (5, interval[float64]): [(0.999, 13.0] < (13.0, 42.0] < (42.0, 54.0] < (54.0, 65.0] < (65.0, 89.0]]
上述代码中,我们使用了Pandas的qcut()函数将数据分成了5个等频区间。qcut()函数会将data中的元素按照数据分布情况自动划分到各个区间中,并返回一个类别(Categorical)类型的Series对象。这个Series中每个元素的数量会尽可能地相等,但是每个元素所对应的数据值范围并不一定相同。
自定义分组
自定义分组是我们常见的一种分组方式,它可以根据我们的需求为每个区间自定义边界值,并将数据划分到这些区间中。下面是一个示例代码,对数据进行自定义分组:
import pandas as pd
import numpy as np
# 生成随机数据
data = np.random.randint(0, 100, 100)
# 自定义分组
bins = pd.cut(data, bins=[0, 20, 40, 60, 80, 100])
# 分组结果
print(bins)
上述代码中,我们使用了Pandas的cut()函数将数据分成了5个自定义区间。cut()函数的bins参数可以接受一个序列作为分组边界,我们在这里将分组边界指定为[0, 20, 40, 60, 80, 100],这样数据会被划分成5组,每组的范围分别是[0,20)、[20,40)、[40,60)、[60,80)和[80,100]。
自定义分组的输出结果如下:
[(40, 60], (0, 20], (20, 40], (0, 20], (20, 40], ..., (60, 80], (20, 40], (20, 40], (0, 20], (60, 80]]
Categories (5, interval[int64]): [(0, 20] < (20, 40] < (40, 60] < (60, 80] < (80, 100]]
上述代码中,我们使用Pandas的cut()函数将数据划分成了5个自定义区间,并返回了一个类别(Categorical)类型的Series对象。cut()函数默认将左区间排除在外,如果需要包含左区间,可以设置include_lowest=True参数。
通过对等宽分组、等频分组、自定义分组的讲解,我们了解了Pandas库中的cut()方法的使用。这个方法可以将数据按照指定的区间进行分组,为我们的数据分析或统计提供了很大的便利。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的Pandas.cut()方法 - Python技术站