2017-09-14 1 views
0

Hier ist ein Beispiel, den Punkt zu bringen:Pandas Groupy auf Serie mit Abständen

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] 

Und wenn ich data.groupby(['a']).count() versuchen, geht es los mit TypeError: unorderable types: Interval() > float()

Aber wenn ich gesetzt -999 in der ersten Zeile, oder 3 Intervallstufen einstellen, es kann laufen!

>>> 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 

Das bedeutet groupby kann Intervall sortieren und floaten? Also heißt das TypeError?

Antwort

0

Ich bin nicht sicher groupby mit Intervals funktioniert, aber es funktioniert auf jeden Fall mit Kategorien. Sie können pd.Categorical verwenden und dann GROUPBY.

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

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