python的三方库pandas有一些能根据指定面元或样本分位数将数据拆分成多块的工具(比如cut或qcut)。将这些函数跟groupby结合起来,就能非常轻松地实现对数据集的桶(bucket)或分位数(quantile)分析了。下面通过三步法来讲解如何使用完成数据拆分,具体如下:
第一步:使用cut方法进行数据切分
In[4]:import pandas as pdIn[5]:from pandas import Series,DataFrameIn[6]:import numpy as npIn[7]:frame=DataFrame({'data1':np.random.randn(1000), 'data2':np.random.randn(1000)})In[8]:factor=pd.cut(frame.data1,4) #注意:长度相等In [9]: factor[0:10]Out[9]: 0 (-1.511, 0.231]1 (1.974, 3.716]2 (-1.511, 0.231]3 (0.231, 1.974]4 (-1.511, 0.231]5 (0.231, 1.974]6 (-1.511, 0.231]7 (-1.511, 0.231]8 (-1.511, 0.231]9 (-3.261, -1.511]Name: data1, dtype: categoryCategories (4, interval[float64]): [(-3.261, -1.511] < (-1.511, 0.231] < (0.231, 1.974] < (1.974, 3.716]]
第二步:基于cut结果进行统计计算
由cut返回的Factor对象可直接用于groupby。因此,可以像下面这样对data2做一些统计计算:
这些都是长度相等的桶。要根据样本分位数得到大小相等的桶,使用qcut即可。传入labels=False即可只获取分位数的编号。
第三步:返回分位数编号
总结
使用python三方库pandas对数据进行拆分的方法,灵活且易用。在实际的使用过程中可以对其具体的使用场景和相应的处理方法进行不断的沉淀,这样会更便于以后的系统化学习。
python好书推荐: