2017-09-14 3 views
0

Voici un exemple pour obtenir le point:Pandas Groupy sur la série avec des intervalles

missing_values=-999.0  
level1=pd._libs.interval.Interval(-np.inf, 1, closed='right') 
level2=pd._libs.interval.Interval(1,np.inf, closed='right') 
data=pd.DataFrame({'a':[level1,missing_values,level2]}) 

>>> data 
      a 
0 (-inf, 1] 
1  -999 
2 (1, inf] 

Et quand je tente data.groupby(['a']).count(), ça ne va pas avec TypeError: unorderable types: Interval() > float()

Mais si je mets -999 à la première ligne, ou définir 3 niveaux d'intervalle, il peut fonctionner!

>>> data 
      a 
0  -999 
1 (-inf, 1] 
2 (1, inf] 

>>> data.groupby(['a']).count() 
a 
-999.0  1 
(-inf, 1] 1 
(1, inf]  1 


>>> data 
    a 
0 (-inf, 1] 
1  -999 
2  (1, 2] 
3 (2, inf] 

>>> data.groupby(['a']).count() 
a 
(-inf, 1] 1 
-999.0  1 
(1, 2]  1 
(2, inf]  1 
Name: a, dtype: int64 

Cela signifie que groupby peut trier intervalle et float? Donc le TypeError signifie-t-il?

Répondre

0

Je ne suis pas sûr que groupby fonctionne avec Intervals, mais cela fonctionne certainement avec les catégories. Vous pouvez utiliser pd.Categorical, puis grouper.

data.groupby(pd.Categorical(data.a)).count() 

      a 
(-inf, 1] 1 
-999.0  1 
(1, inf] 1