@@ -949,31 +949,22 @@ def value_counts(self, dropna: bool = True) -> Series:
949949 )
950950 from pandas .arrays import IntegerArray
951951
952+ keys , value_counts = algos .value_counts_arraylike (
953+ self ._data , dropna = True , mask = self ._mask
954+ )
955+
952956 if dropna :
953- keys , counts = algos .value_counts_arraylike (
954- self ._data , dropna = True , mask = self ._mask
955- )
956- res = Series (counts , index = keys )
957+ res = Series (value_counts , index = keys )
957958 res .index = res .index .astype (self .dtype )
958959 res = res .astype ("Int64" )
959960 return res
960961
961- # compute counts on the data with no nans
962- data = self ._data [~ self ._mask ]
963- value_counts = Index (data ).value_counts ()
964-
965- index = value_counts .index
966-
967962 # if we want nans, count the mask
968- if dropna :
969- counts = value_counts ._values
970- else :
971- counts = np .empty (len (value_counts ) + 1 , dtype = "int64" )
972- counts [:- 1 ] = value_counts
973- counts [- 1 ] = self ._mask .sum ()
974-
975- index = index .insert (len (index ), self .dtype .na_value )
963+ counts = np .empty (len (value_counts ) + 1 , dtype = "int64" )
964+ counts [:- 1 ] = value_counts
965+ counts [- 1 ] = self ._mask .sum ()
976966
967+ index = Index (keys , dtype = self .dtype ).insert (len (keys ), self .dtype .na_value )
977968 index = index .astype (self .dtype )
978969
979970 mask = np .zeros (len (counts ), dtype = "bool" )
0 commit comments