2017-10-19 13 views
1

Je travaille avec pandas géants Pcut et somethimes (quand un grand nombre de données sont égales à la min), il retourne soit une erreur:Pandas qcut binning retour un seul groupe

Bin edges must be unique 

Ou je dois laisser tomber le non -Les bacs que je reçois, mais toutes mes données sont dans un bac.

Par exemple: jeu de données :

import pandas as pd 
nbins = 2 
pd.qcut([0,0,0,0,0,1,2,3], nbins) 

Je veux donc avoir ceux ci-dessus ou au-dessous de la médiane (ici 0). Je me attends à obtenir:

Mais ce sont get sont soit:

pd.qcut([0,0,0,0,0,1,2,3], 2) 
out >>> ValueError: Bin edges must be unique: array([ 0., 0., 3.]). 

Si je laisse tomber les bacs non uniques:

pd.qcut([0,0,0,0,0,1,2,3], 2, duplicates='drop') 
out >>> [(-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0], (-0.001, 3.0]] 
Categories (1, interval[float64]): [(-0.001, 3.0]] 

Et tout est dans une seule Catégorie.

Je ne veux pas forcément avoir +/- median, ceci est juste un exemple quand les données sont groupées autour du min.

Merci pour votre aide

Répondre

0

J'ai trouvé un moyen très laid pour le résoudre ...:

try: 
    pd.qcut(data, n_bins) 
except ValueError: 
    pd.qcut(data, n_bins+1, duplicates = 'drop')