@@ -949,31 +949,22 @@ def value_counts(self, dropna: bool = True) -> Series:
949
949
)
950
950
from pandas .arrays import IntegerArray
951
951
952
+ keys , value_counts = algos .value_counts_arraylike (
953
+ self ._data , dropna = True , mask = self ._mask
954
+ )
955
+
952
956
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 )
957
958
res .index = res .index .astype (self .dtype )
958
959
res = res .astype ("Int64" )
959
960
return res
960
961
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
-
967
962
# 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 ()
976
966
967
+ index = Index (keys , dtype = self .dtype ).insert (len (keys ), self .dtype .na_value )
977
968
index = index .astype (self .dtype )
978
969
979
970
mask = np .zeros (len (counts ), dtype = "bool" )
0 commit comments