|
25 | 25 | from pandas.core.dtypes.dtypes import register_extension_dtype
|
26 | 26 | from pandas.core.dtypes.missing import isna
|
27 | 27 |
|
28 |
| -from pandas.core import nanops, ops |
29 |
| -from pandas.core.array_algos import masked_reductions |
| 28 | +from pandas.core import ops |
30 | 29 | from pandas.core.ops import invalid_comparison
|
31 | 30 | from pandas.core.ops.common import unpack_zerodim_and_defer
|
32 | 31 | from pandas.core.tools.numeric import to_numeric
|
@@ -452,33 +451,21 @@ def cmp_method(self, other):
|
452 | 451 | name = f"__{op.__name__}__"
|
453 | 452 | return set_function_name(cmp_method, name, cls)
|
454 | 453 |
|
455 |
| - def _reduce(self, name: str, skipna: bool = True, **kwargs): |
456 |
| - data = self._data |
457 |
| - mask = self._mask |
458 |
| - |
459 |
| - if name in {"sum", "prod", "min", "max"}: |
460 |
| - op = getattr(masked_reductions, name) |
461 |
| - return op(data, mask, skipna=skipna, **kwargs) |
462 |
| - |
463 |
| - # coerce to a nan-aware float if needed |
464 |
| - # (we explicitly use NaN within reductions) |
465 |
| - if self._hasna: |
466 |
| - data = self.to_numpy("float64", na_value=np.nan) |
467 |
| - |
468 |
| - op = getattr(nanops, "nan" + name) |
469 |
| - result = op(data, axis=0, skipna=skipna, mask=mask, **kwargs) |
| 454 | + def sum(self, skipna=True, min_count=0, **kwargs): |
| 455 | + nv.validate_sum((), kwargs) |
| 456 | + return super()._reduce("sum", skipna=skipna, min_count=min_count) |
470 | 457 |
|
471 |
| - if np.isnan(result): |
472 |
| - return libmissing.NA |
| 458 | + def prod(self, skipna=True, min_count=0, **kwargs): |
| 459 | + nv.validate_prod((), kwargs) |
| 460 | + return super()._reduce("prod", skipna=skipna, min_count=min_count) |
473 | 461 |
|
474 |
| - return result |
| 462 | + def min(self, skipna=True, **kwargs): |
| 463 | + nv.validate_min((), kwargs) |
| 464 | + return super()._reduce("min", skipna=skipna) |
475 | 465 |
|
476 |
| - def sum(self, skipna=True, min_count=0, **kwargs): |
477 |
| - nv.validate_sum((), kwargs) |
478 |
| - result = masked_reductions.sum( |
479 |
| - values=self._data, mask=self._mask, skipna=skipna, min_count=min_count |
480 |
| - ) |
481 |
| - return result |
| 466 | + def max(self, skipna=True, **kwargs): |
| 467 | + nv.validate_max((), kwargs) |
| 468 | + return super()._reduce("max", skipna=skipna) |
482 | 469 |
|
483 | 470 | def _maybe_mask_result(self, result, mask, other, op_name: str):
|
484 | 471 | """
|
|
0 commit comments