@@ -2097,20 +2097,26 @@ def std(
2097
2097
f"numeric_only={ numeric_only } and dtype { self .obj .dtype } "
2098
2098
)
2099
2099
2100
+ def _preprocessing (values ):
2101
+ if isinstance (values , BaseMaskedArray ):
2102
+ return values ._data , None
2103
+ return values , None
2104
+
2100
2105
def _postprocessing (
2101
- vals , inference , nullable : bool = False , mask = None
2106
+ vals , inference , nullable : bool = False , result_mask = None
2102
2107
) -> ArrayLike :
2103
2108
if nullable :
2104
- if mask .ndim == 2 :
2105
- mask = mask [:, 0 ]
2106
- return FloatingArray (np .sqrt (vals ), mask .view (np .bool_ ))
2109
+ if result_mask .ndim == 2 :
2110
+ result_mask = result_mask [:, 0 ]
2111
+ return FloatingArray (np .sqrt (vals ), result_mask .view (np .bool_ ))
2107
2112
return np .sqrt (vals )
2108
2113
2109
2114
result = self ._get_cythonized_result (
2110
2115
libgroupby .group_var ,
2111
2116
cython_dtype = np .dtype (np .float64 ),
2112
2117
numeric_only = numeric_only ,
2113
2118
needs_counts = True ,
2119
+ pre_processing = _preprocessing ,
2114
2120
post_processing = _postprocessing ,
2115
2121
ddof = ddof ,
2116
2122
how = "std" ,
@@ -3720,7 +3726,7 @@ def blk_func(values: ArrayLike) -> ArrayLike:
3720
3726
inferences = None
3721
3727
3722
3728
if needs_counts :
3723
- counts = np .zeros (self . ngroups , dtype = np .int64 )
3729
+ counts = np .zeros (ngroups , dtype = np .int64 )
3724
3730
func = partial (func , counts = counts )
3725
3731
3726
3732
vals = values
@@ -3742,11 +3748,11 @@ def blk_func(values: ArrayLike) -> ArrayLike:
3742
3748
is_nullable = isinstance (values , BaseMaskedArray )
3743
3749
func = partial (func , nullable = is_nullable )
3744
3750
3745
- else :
3751
+ elif isinstance ( values , BaseMaskedArray ) :
3746
3752
result_mask = np .zeros (result .shape , dtype = np .bool_ )
3747
3753
func = partial (func , result_mask = result_mask )
3748
3754
3749
- func (** kwargs ) # Call func to modify indexer values in place
3755
+ func (** kwargs ) # Call func to modify result in place
3750
3756
3751
3757
if values .ndim == 1 :
3752
3758
assert result .shape [1 ] == 1 , result .shape
@@ -3755,8 +3761,8 @@ def blk_func(values: ArrayLike) -> ArrayLike:
3755
3761
if post_processing :
3756
3762
pp_kwargs : dict [str , bool | np .ndarray ] = {}
3757
3763
pp_kwargs ["nullable" ] = isinstance (values , BaseMaskedArray )
3758
- if how == "std" :
3759
- pp_kwargs ["mask " ] = result_mask
3764
+ if how == "std" and pp_kwargs [ "nullable" ] :
3765
+ pp_kwargs ["result_mask " ] = result_mask
3760
3766
3761
3767
result = post_processing (result , inferences , ** pp_kwargs )
3762
3768
0 commit comments