@@ -416,7 +416,6 @@ def _wrap_applied_output(
416
416
# GH #823 #24880
417
417
index = self .grouper .result_index
418
418
res_df = self .obj ._constructor_expanddim (values , index = index )
419
- res_df = self ._reindex_output (res_df )
420
419
# if self.observed is False,
421
420
# keep all-NaN rows created while re-indexing
422
421
res_ser = res_df .stack (future_stack = True )
@@ -442,7 +441,7 @@ def _wrap_applied_output(
442
441
if not self .as_index :
443
442
result = self ._insert_inaxis_grouper (result )
444
443
result .index = default_index (len (result ))
445
- return self . _reindex_output ( result )
444
+ return result
446
445
447
446
def _aggregate_named (self , func , * args , ** kwargs ):
448
447
# Note: this is very similar to _aggregate_series_pure_python,
@@ -672,7 +671,7 @@ def nunique(self, dropna: bool = True) -> Series | DataFrame:
672
671
2023-02-01 1
673
672
Freq: MS, dtype: int64
674
673
"""
675
- ids , _ , _ = self .grouper .group_info
674
+ ids , _ = self .grouper .group_info
676
675
677
676
val = self .obj ._values
678
677
@@ -721,7 +720,7 @@ def nunique(self, dropna: bool = True) -> Series | DataFrame:
721
720
if not self .as_index :
722
721
result = self ._insert_inaxis_grouper (result )
723
722
result .index = default_index (len (result ))
724
- return self . _reindex_output ( result , fill_value = 0 )
723
+ return result
725
724
726
725
@doc (Series .describe )
727
726
def describe (self , percentiles = None , include = None , exclude = None ) -> Series :
@@ -749,7 +748,7 @@ def value_counts(
749
748
from pandas .core .reshape .merge import get_join_indexers
750
749
from pandas .core .reshape .tile import cut
751
750
752
- ids , _ , _ = self .grouper .group_info
751
+ ids , _ = self .grouper .group_info
753
752
val = self .obj ._values
754
753
755
754
index_names = self .grouper .names + [self .obj .name ]
@@ -819,9 +818,18 @@ def value_counts(
819
818
rep = partial (np .repeat , repeats = np .add .reduceat (inc , idx ))
820
819
821
820
# multi-index components
822
- codes = self .grouper .reconstructed_codes
821
+ if isinstance (self .grouper .result_index , MultiIndex ):
822
+ codes = list (self .grouper .result_index .codes )
823
+ else :
824
+ codes = [
825
+ algorithms .factorize (
826
+ self .grouper .result_index ,
827
+ sort = self .grouper ._sort ,
828
+ use_na_sentinel = self .grouper .dropna ,
829
+ )[0 ]
830
+ ]
823
831
codes = [rep (level_codes ) for level_codes in codes ] + [llab (lab , inc )]
824
- levels = [ ping . group_index for ping in self .grouper .groupings ] + [lev ]
832
+ levels = self .grouper .levels + [lev ]
825
833
826
834
if dropna :
827
835
mask = codes [- 1 ] != - 1
@@ -1686,7 +1694,7 @@ def _wrap_applied_output_series(
1686
1694
if not self .as_index :
1687
1695
result = self ._insert_inaxis_grouper (result )
1688
1696
1689
- return self . _reindex_output ( result )
1697
+ return result
1690
1698
1691
1699
def _cython_transform (
1692
1700
self ,
0 commit comments