@@ -199,19 +199,25 @@ def __new__(cls, *args, **kwargs):
199
199
cls = TimeGrouper
200
200
return super (Grouper , cls ).__new__ (cls )
201
201
202
- def __init__ (self , key = None , level = None , freq = None , axis = 0 , sort = False ):
202
+ def __init__ (self , key = None , level = None , freq = None , axis = 0 , sort = None ):
203
203
self .key = key
204
204
self .level = level
205
205
self .freq = freq
206
206
self .axis = axis
207
- self .sort = sort
207
+ self ._sort = sort
208
208
209
209
self .grouper = None
210
210
self .obj = None
211
211
self .indexer = None
212
212
self .binner = None
213
213
self .grouper = None
214
214
215
+ @property
216
+ def sort (self ):
217
+ if self ._sort is None :
218
+ return True
219
+ return self ._sort
220
+
215
221
@property
216
222
def ax (self ):
217
223
return self .grouper
@@ -233,7 +239,7 @@ def _get_grouper(self, obj):
233
239
level = self .level , sort = self .sort )
234
240
return self .binner , self .grouper , self .obj
235
241
236
- def _set_grouper (self , obj , sort = False ):
242
+ def _set_grouper (self , obj , sort = None ):
237
243
"""
238
244
given an object and the specifcations, setup the internal grouper for this particular specification
239
245
@@ -359,7 +365,7 @@ class GroupBy(PandasObject):
359
365
360
366
def __init__ (self , obj , keys = None , axis = 0 , level = None ,
361
367
grouper = None , exclusions = None , selection = None , as_index = True ,
362
- sort = True , group_keys = True , squeeze = False ):
368
+ sort = None , group_keys = True , squeeze = False ):
363
369
self ._selection = selection
364
370
365
371
if isinstance (obj , NDFrame ):
@@ -375,7 +381,7 @@ def __init__(self, obj, keys=None, axis=0, level=None,
375
381
376
382
self .as_index = as_index
377
383
self .keys = keys
378
- self .sort = sort
384
+ self ._sort = sort
379
385
self .group_keys = group_keys
380
386
self .squeeze = squeeze
381
387
@@ -388,6 +394,12 @@ def __init__(self, obj, keys=None, axis=0, level=None,
388
394
self .grouper = grouper
389
395
self .exclusions = set (exclusions ) if exclusions else set ()
390
396
397
+ @property
398
+ def sort (self ):
399
+ if self ._sort is None :
400
+ return True
401
+ return self ._sort
402
+
391
403
def __len__ (self ):
392
404
return len (self .indices )
393
405
@@ -1214,11 +1226,17 @@ class BaseGrouper(object):
1214
1226
This is an internal Grouper class, which actually holds the generated groups
1215
1227
"""
1216
1228
1217
- def __init__ (self , axis , groupings , sort = True , group_keys = True ):
1229
+ def __init__ (self , axis , groupings , sort = None , group_keys = True ):
1218
1230
self ._filter_empty_groups = self .compressed = len (groupings ) != 1
1219
- self .axis , self .groupings , self .sort , self .group_keys = \
1231
+ self .axis , self .groupings , self ._sort , self .group_keys = \
1220
1232
axis , groupings , sort , group_keys
1221
1233
1234
+ @property
1235
+ def sort (self ):
1236
+ if self ._sort is None :
1237
+ return True
1238
+ return self ._sort
1239
+
1222
1240
@property
1223
1241
def shape (self ):
1224
1242
return tuple (ping .ngroups for ping in self .groupings )
@@ -1857,13 +1875,13 @@ class Grouping(object):
1857
1875
"""
1858
1876
1859
1877
def __init__ (self , index , grouper = None , obj = None , name = None , level = None ,
1860
- sort = True , in_axis = False ):
1878
+ sort = None , in_axis = False ):
1861
1879
1862
1880
self .name = name
1863
1881
self .level = level
1864
1882
self .grouper = _convert_grouper (index , grouper )
1865
1883
self .index = index
1866
- self .sort = sort
1884
+ self ._sort = sort
1867
1885
self .obj = obj
1868
1886
self .in_axis = in_axis
1869
1887
@@ -1926,7 +1944,7 @@ def __init__(self, index, grouper=None, obj=None, name=None, level=None,
1926
1944
1927
1945
# must have an ordered categorical
1928
1946
if self .sort :
1929
- if not self .grouper .ordered :
1947
+ if self . _sort and not self .grouper .ordered :
1930
1948
raise ValueError ("cannot sort by an unordered Categorical in the grouper\n "
1931
1949
"you can set sort=False in the groupby expression or\n "
1932
1950
"make the categorical ordered by using .set_ordered(True)\n " )
@@ -1972,6 +1990,12 @@ def __init__(self, index, grouper=None, obj=None, name=None, level=None,
1972
1990
from pandas import to_timedelta
1973
1991
self .grouper = to_timedelta (self .grouper )
1974
1992
1993
+ @property
1994
+ def sort (self ):
1995
+ if self ._sort is None :
1996
+ return True
1997
+ return self ._sort
1998
+
1975
1999
def __repr__ (self ):
1976
2000
return 'Grouping(%s)' % self .name
1977
2001
0 commit comments