@@ -688,9 +688,9 @@ def describe(self, **kwargs):
688688
689689 def value_counts (
690690 self ,
691- normalize = False ,
692- sort = True ,
693- ascending = False ,
691+ normalize : bool = False ,
692+ sort : bool = True ,
693+ ascending : bool = False ,
694694 bins = None ,
695695 dropna : bool = True ,
696696 ):
@@ -715,7 +715,7 @@ def apply_series_value_counts():
715715 # scalar bins cannot be done at top level
716716 # in a backward compatible way
717717 return apply_series_value_counts ()
718- elif is_categorical_dtype (val ):
718+ elif is_categorical_dtype (val . dtype ):
719719 # GH38672
720720 return apply_series_value_counts ()
721721
@@ -807,44 +807,36 @@ def apply_series_value_counts():
807807 sorter = np .lexsort ((out if ascending else - out , cat ))
808808 out , codes [- 1 ] = out [sorter ], codes [- 1 ][sorter ]
809809
810- if bins is None :
811- mi = MultiIndex (
812- levels = levels , codes = codes , names = names , verify_integrity = False
813- )
814-
815- if is_integer_dtype (out ):
816- out = ensure_int64 (out )
817- return self .obj ._constructor (out , index = mi , name = self ._selection_name )
818-
819- # for compat. with libgroupby.value_counts need to ensure every
820- # bin is present at every index level, null filled with zeros
821- diff = np .zeros (len (out ), dtype = "bool" )
822- for level_codes in codes [:- 1 ]:
823- diff |= np .r_ [True , level_codes [1 :] != level_codes [:- 1 ]]
810+ if bins is not None :
811+ # for compat. with libgroupby.value_counts need to ensure every
812+ # bin is present at every index level, null filled with zeros
813+ diff = np .zeros (len (out ), dtype = "bool" )
814+ for level_codes in codes [:- 1 ]:
815+ diff |= np .r_ [True , level_codes [1 :] != level_codes [:- 1 ]]
824816
825- ncat , nbin = diff .sum (), len (levels [- 1 ])
817+ ncat , nbin = diff .sum (), len (levels [- 1 ])
826818
827- left = [np .repeat (np .arange (ncat ), nbin ), np .tile (np .arange (nbin ), ncat )]
819+ left = [np .repeat (np .arange (ncat ), nbin ), np .tile (np .arange (nbin ), ncat )]
828820
829- right = [diff .cumsum () - 1 , codes [- 1 ]]
821+ right = [diff .cumsum () - 1 , codes [- 1 ]]
830822
831- _ , idx = get_join_indexers (left , right , sort = False , how = "left" )
832- out = np .where (idx != - 1 , out [idx ], 0 )
823+ _ , idx = get_join_indexers (left , right , sort = False , how = "left" )
824+ out = np .where (idx != - 1 , out [idx ], 0 )
833825
834- if sort :
835- sorter = np .lexsort ((out if ascending else - out , left [0 ]))
836- out , left [- 1 ] = out [sorter ], left [- 1 ][sorter ]
826+ if sort :
827+ sorter = np .lexsort ((out if ascending else - out , left [0 ]))
828+ out , left [- 1 ] = out [sorter ], left [- 1 ][sorter ]
837829
838- # build the multi-index w/ full levels
839- def build_codes (lev_codes : np .ndarray ) -> np .ndarray :
840- return np .repeat (lev_codes [diff ], nbin )
830+ # build the multi-index w/ full levels
831+ def build_codes (lev_codes : np .ndarray ) -> np .ndarray :
832+ return np .repeat (lev_codes [diff ], nbin )
841833
842- codes = [build_codes (lev_codes ) for lev_codes in codes [:- 1 ]]
843- codes .append (left [- 1 ])
834+ codes = [build_codes (lev_codes ) for lev_codes in codes [:- 1 ]]
835+ codes .append (left [- 1 ])
844836
845837 mi = MultiIndex (levels = levels , codes = codes , names = names , verify_integrity = False )
846838
847- if is_integer_dtype (out ):
839+ if is_integer_dtype (out . dtype ):
848840 out = ensure_int64 (out )
849841 return self .obj ._constructor (out , index = mi , name = self ._selection_name )
850842
0 commit comments