浅谈pandas.cut与pandas.qcut的使用方法及区别

  • Post category:Python

当我们需要对数据进行分组运算时,经常用到pandas.cutpandas.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函数切割出来的数据组数一定相同。