当我们要汇总很多数据的时候,常见的比如商品价格是数据,要看看那些价格段的销售情况,这个时候就需要对价格段先进行分组,然后再按分组求和或者计数,就能看每个价格段的数据情况了。当只分几组的时候,还可以手动操作一下,但是要分几十组的时候,手动操作就很麻烦了,这个时候就需要专门的函数来帮忙了,Python的pandas提供了两个分箱函数,很好用,cut和qcut。
【cut函数】
功能就是按照指定的值进行分组,或者指定需要分成几组,它自动给你分好,参数如下↓
pd.cut(x, #一维数组 bins, #整数,标量序列或者间隔索引,是进行分组的依据;如果是标量序列,序列中的数值表示用来分档的分界值 right=True, #布尔值,默认为True表示包含最右侧的数值 labels=None, #数组或布尔值,可选:指定分箱的标签 retbins=False, #是否显示分箱的分界值。默认为False,当bins取整数时可以设置retbins=True以显示分界值,得到划分后的区间 precision=3, #整数,默认3,存储和显示分箱标签的精度 include_lowest=False, #布尔值,表示区间的左边是开还是闭,默认为false,也就是不包含区间左边 duplicates='raise', ) #如果分箱临界值不唯一,则引发ValueError或丢弃非唯一
我们先导入一个简单的数据,然后在操作一下,就明白了。
import osos.chdir(r"E:\Python\小工具")import pandas as pddf = pd.read_excel("分箱测试.xlsx",sheet_name=0)
数据就是这样,主要就是按照年龄就行分组操作。
#分成4组,默认左开右闭
df['左开右闭'] = pd.cut(df['age'],bins=4)
#添加标签,结果按标签显示
df['加标签'] = pd.cut(df['age'],bins=4, labels=["A","B","C","D"])
#左闭,右开
df['左闭右开'] = pd.cut(df['age'],bins=4, right=False, include_lowest=True)
#自定义区间
df['自定义'] = pd.cut(df['age'],bins=[0,18,35,60,100], right=False, include_lowest=True)
#自定义区间+自定义标签
df['自定义标签'] = pd.cut(df['age'],bins=[0,18,35,60,100], labels=["未成年","青年","中年","老年人"], right=False, include_lowest=True)
【qcut函数】
基于分位数的离散化功能。将变量离散化为基于等级或样本分位数的相等大小的存储桶。
和pd.cut()相比,pd.qcut()的参数少了两个,少了right和include_lowest两个参数,剩下的参数几乎和pd.cut()一模一样了。
pd.qcut(x, q, #表示分位数的整数或者数组,如果是分位数的整数,例如10用于十分位,4用于四分位;如果是分位数数组,例如[0,0.25,0.5,0.75,1]用于四分位数 labels=None, retbins=False, precision=3, duplicates='raise')
#q=4表示分成四个箱子,边界值分别为四分位数,四分之二分位数和四分之三分位数,并给每个箱子都指定了标签
pd.qcut([*range(1,101)], q=4)
#q=[0,0.25,0.5,0.75,1]和上面q=4效果一样
pd.qcut([*range(1,101)], q=[0,0.25,0.5,0.75,1])
df['qcut1'] = pd.qcut(df['age'], q=4)
df['qcut2'] = pd.qcut(df['age'], q=4, labels=['AA','BB',"CC",'DD'])
End
◆ Python高德地图可视化 ◆ Python拼音 ◆ Python_头像动漫化