python——numpy——数据分区(digitize,cut,qcut,quantile函数)

15 篇文章 1 订阅
14 篇文章 1 订阅

一、区间划分

1、digitize():主要用于将一组数据进行分区。

主要参数:

  • bins:标量序列,分区的依据,bins内的数据一定要是降序或者升序的数据,不能是一堆无序数据。。

返回值:所属区间的上限在bins中的索引。

import numpy as np
import pandas as pd

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

df=pd.DataFrame(np.random.randint(135,210,100),columns=['a']) #创建数据
print('------原始数据------')
df

#创建分区
bins=np.arange(135,215,5)#注意:bins数据是有要求的,bins内的数据一定要是降序或者升序的数据,不能是一堆无序数据。

#digitize
indices=np.digitize(df['a'],bins) #返回值为每个值所属区间的索引。
print('------digitize算法:返回索引------')
indices

#打上标签
df['a1']=[str(bins[i-1])+"~"+str(bins[i]) for i in indices] 
df

输出:

接下来可根据分区进行汇总操作:

df.groupby(['a1'])['a'].count().reset_index()

输出:

2、cut():主要用于将一组数据进行分区。

主要参数:

  • bins:标量序列,分区的依据,bins内的数据一定要是降序或者升序的数据,不能是一堆无序数据。。
  • label:标签,分区之后,返回值中各区间可以用标签一一替换显示,如果不指定,返回值以半开区间的分区显示,例如(100,200]。

返回值:各个数据所在bins中的区间。

import numpy as np
import pandas as pd

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

df=pd.DataFrame(np.random.randint(135,210,100),columns=['a']) #创建数据
print('------原始数据------')
df

#创建分区
bins=np.arange(135,215,5)#注意:bins数据是有要求的,bins内的数据一定要是降序或者升序的数据,不能是一堆无序数据。

print('------cut算法------')
#cut算法
df['a2']=pd.cut(df['a'],bins
                # ,labels=['bad','medium','good','awesome']
               )
df

输出:

二、分位数划区间

1、qcut():主要用于将一组数据进行分区,是cut里面的特例,是以分位数进行分区的。

主要参数:

  • q:按分位数进行分区之后的区间数,例如4,则是按照(0,25,50,75,100]这样的分区分成四段。
  • label:标签,分区之后,返回值中各区间可以用标签一一替换显示。

返回值:各个数据所在的区间。

import numpy as np
import pandas as pd

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

df=pd.DataFrame(np.random.randint(135,210,100),columns=['a']) #创建数据
print('------原始数据------')
df

print('------qcut算法------')
#qcut算法
df['a3']=pd.qcut(df['a'],4
                 # ,labels=['bad','medium','good','awesome']
                )
df

输出:

2、quantile():主要用于将一组数据进行分区,计算沿指定轴的数据的第q个分位数。

主要参数:

  • a :输入数组或可以转换为数组的对象。

  • q :要计算的分位数或分位数序列,必须在0到1之间(含0和1)。

  • axis : 可选,用于计算分位数的一个或多个轴。默认值是沿数组的展平版本计算分位数。

返回值:返回第q个分位数或者是一组分位数序列。

import numpy as np
import pandas as pd

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

df=pd.DataFrame(np.random.randint(135,210,100),columns=['a']) #创建数据
print('------原始数据------')
df

#创建分位数序列
bins=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0] 

#quantile
indices=np.quantile(df['a'],bins) #返回值为各个分位数的具体值。
print('------quantile算法:返回分位数值------')
indices

输出:

 

 

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xia ge tou lia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值