Convertir les données dans la corbeille de quantiles

J'ai un dataframe numérique colonnes. Pour chaque colonne, je voudrais calculer les quantiles d'information et d'attribuer à chaque ligne de l'un d'eux. J'ai essayé d'utiliser le qcut() méthode pour retourner une liste de poubelles, mais au lieu de cela fini par le calcul de l'bacs individuellement. Ce que je pensais peut-être exister, mais je ne pouvais pas trouver ce serait une méthode comme df.to_quintile(num of quantiles). C'est ce que je suis venu avec, mais je me demandais si il n'y a plus succinct/pandas moyen de le faire.

import pandas as pd

#create a dataframe
df = pd.DataFrame(randn(10, 4), columns=['A', 'B', 'C', 'D'])

def quintile(df, column):
    """
    calculate quintiles and assign each sample/column to a quintile 
    """
    #calculate the quintiles using pandas .quantile() here
    quintiles = [df[column].quantile(value) for value in [0.0,0.2,0.4,0.6,0.8]]
    quintiles.reverse() #reversing makes the next loop simpler

    #function to check membership in quintile to be used with pandas apply
    def check_quintile(x, quintiles=quintiles):
        for num,level in enumerate(quintiles):
            #print number, level, level[1]
            if  x >= level:
                print x, num
                return num+1

    df[column] = df[column].apply(check_quintile)

quintile(df,'A')

grâce,
zach cp

EDIT: Après avoir vu DSMs répondre à la fonction peut être écrite beaucoup plus simple (ci-dessous). L'homme, c'est doux.

def quantile(column, quantile=5):
    q = qcut(column, quantile)
    return len(q.levels)- q.labels
df.apply(quantile)
#or
df['A'].apply(quantile)

source d'informationauteur zach | 2013-01-12