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

一、区间划分

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

输出:

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第1张图片

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第2张图片

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第3张图片

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

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

输出:

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第4张图片

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

输出:

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第5张图片

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第6张图片

二、分位数划区间

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

输出:

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第7张图片

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第8张图片

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

输出:

python——numpy——数据分区(digitize,cut,qcut,quantile函数)_第9张图片

 

 

你可能感兴趣的:(pyhton,Numpy,pandas)