@@ -489,11 +489,9 @@ def shape(self):
489
489
def __iter__ (self ):
490
490
return iter (self .indices )
491
491
492
- def numkeys (self ):
493
- try :
494
- return len (self .groupings )
495
- except :
496
- return 1
492
+ @property
493
+ def nkeys (self ):
494
+ return len (self .groupings )
497
495
498
496
def get_iterator (self , data , axis = 0 ):
499
497
"""
@@ -601,6 +599,10 @@ def _get_compressed_labels(self):
601
599
def _overflow_possible (self ):
602
600
return _int64_overflow_possible (self .shape )
603
601
602
+ @cache_readonly
603
+ def ngroups (self ):
604
+ return len (self .result_index )
605
+
604
606
@cache_readonly
605
607
def result_index (self ):
606
608
recons = self .get_group_levels ()
@@ -830,6 +832,10 @@ def __init__(self, bins, binlabels):
830
832
self .bins = bins
831
833
self .binlabels = binlabels
832
834
835
+ @property
836
+ def nkeys (self ):
837
+ return 1
838
+
833
839
def get_iterator (self , data , axis = 0 ):
834
840
"""
835
841
Groupby iterator
@@ -1271,7 +1277,7 @@ def aggregate(self, func_or_funcs, *args, **kwargs):
1271
1277
if cyfunc and not args and not kwargs :
1272
1278
return getattr (self , cyfunc )()
1273
1279
1274
- if self .grouper .numkeys () > 1 :
1280
+ if self .grouper .nkeys > 1 :
1275
1281
return self ._python_agg_general (func_or_funcs , * args , ** kwargs )
1276
1282
1277
1283
try :
@@ -1312,18 +1318,15 @@ def _wrap_applied_output(self, keys, values, not_indexed_same=False):
1312
1318
if len (keys ) == 0 :
1313
1319
return Series ([])
1314
1320
1315
- key_names = self .grouper .names
1316
-
1317
1321
def _get_index ():
1318
- if self .grouper .numkeys () > 1 :
1319
- index = MultiIndex .from_tuples (keys , names = key_names )
1322
+ if self .grouper .nkeys > 1 :
1323
+ index = MultiIndex .from_tuples (keys , names = self . grouper . names )
1320
1324
else :
1321
- ping = self .grouper .groupings [0 ]
1322
- if len (keys ) == ping .ngroups :
1323
- index = ping .group_index
1324
- index .name = key_names [0 ]
1325
- else :
1326
- index = Index (keys , name = key_names [0 ])
1325
+ index = Index (keys , name = self .grouper .names [0 ])
1326
+ # if len(keys) == self.grouper.ngroups:
1327
+ # index = self.grouper.result_index
1328
+ # else:
1329
+ # index = Index(keys, name=self.grouper.names[0])
1327
1330
return index
1328
1331
1329
1332
if isinstance (values [0 ], Series ):
@@ -1524,7 +1527,7 @@ def aggregate(self, arg, *args, **kwargs):
1524
1527
if cyfunc and not args and not kwargs :
1525
1528
return getattr (self , cyfunc )()
1526
1529
1527
- if self .grouper .numkeys () > 1 :
1530
+ if self .grouper .nkeys > 1 :
1528
1531
return self ._python_agg_general (arg , * args , ** kwargs )
1529
1532
else :
1530
1533
result = self ._aggregate_generic (arg , * args , ** kwargs )
@@ -1568,7 +1571,7 @@ def _aggregate_multiple_funcs(self, arg):
1568
1571
return result
1569
1572
1570
1573
def _aggregate_generic (self , func , * args , ** kwargs ):
1571
- assert (self .grouper .numkeys () == 1 )
1574
+ assert (self .grouper .nkeys == 1 )
1572
1575
1573
1576
axis = self .axis
1574
1577
obj = self ._obj_with_exclusions
0 commit comments