当我们需要对数据进行分组运算时,经常用到pandas.cut
与pandas.qcut
这两个函数,它们用于将一组数按照指定的“区间”进行分组,并且可以进行一些统计分析。
pandas.cut函数
使用方法
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates=’raise’)
。
x
:要被切割的数据;bins
:指定区间,可以按照区间数量指定,例如bins=5
,也可以按照区间范围指定,例如bins=[0, 20, 50, 80, 100]
;right
:区间末端是否包含,默认包含;labels
:用于对分组结果进行标记,一般与bins长度一致;retbins
:是否需要返回所使用的bins值;precision
:区间的精度;include_lowest
:是否包含左端点;duplicates
:当bins中有重复的值时,如何处理。
使用示例
import pandas as pd
import numpy as np
# 定义数据,并使用cut方法进行切割
data = pd.DataFrame(np.random.randint(0,100,size=(100,4)), columns=list('ABCD'))
data['AB分组'] = pd.cut(data['A'], bins=[0, 20, 40, 60, 80, 100], labels=['0-20', '20-40','40-60','60-80','80-100'])
print(data.head())
输出结果如下:
A B C D AB分组
0 32 30 37 15 20-40
1 40 68 43 34 20-40
2 89 62 46 39 80-100
3 23 35 37 32 20-40
4 32 65 81 40 20-40
pandas.qcut函数
使用方法
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates=’raise’)
。
x
:要被切割的数据;q
:分位数数值;labels
:用于对分组结果进行标记,一般与bins长度一致;retbins
:是否需要返回所使用的bins值;precision
:分位数的精度;duplicates
:当分位数中有重复的值时,如何处理。
使用示例
import pandas as pd
# 构造数据,并使用qcut方法进行切割
data = pd.Series([1,2,3,4,5,6,7,8,9,10])
data_qcut = pd.qcut(data, 2, labels=['小', '大'])
print(data_qcut)
输出结果如下:
0 小
1 小
2 小
3 小
4 小
5 大
6 大
7 大
8 大
9 大
dtype: category
Categories (2, object): ['小' < '大']
cut与qcut的区别
pandas.cut(x)
:把x分成相同大小的若干区间,每个区间中数据个数可以不一样;pandas.qcut(x)
:把x分成相同多的若干组,每组中数据数量相等。
综上所述,使用cut
函数切割出来的数据组数不一定相同,而使用qcut
函数切割出来的数据组数一定相同。