Skip to content

Commit 90e1573

Browse files
committed
fix min/max/median for 2D arrays
1 parent b48ee6d commit 90e1573

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

db_dtypes/core.py

+25-19
Original file line numberDiff line numberDiff line change
@@ -135,29 +135,35 @@ def min(self, *, axis: Optional[int] = None, skipna: bool = True, **kwargs):
135135
result = pandas_backports.nanmin(
136136
values=self._ndarray, axis=axis, mask=self.isna(), skipna=skipna
137137
)
138-
return self._box_func(result)
138+
if axis is None or self.ndim == 1:
139+
return self._box_func(result)
140+
return self._from_backing_data(result)
139141

140142
def max(self, *, axis: Optional[int] = None, skipna: bool = True, **kwargs):
141143
pandas_backports.numpy_validate_max((), kwargs)
142144
result = pandas_backports.nanmax(
143145
values=self._ndarray, axis=axis, mask=self.isna(), skipna=skipna
144146
)
145-
return self._box_func(result)
146-
147-
if pandas_release >= (1, 2):
148-
149-
def median(
150-
self,
151-
*,
152-
axis: Optional[int] = None,
153-
out=None,
154-
overwrite_input: bool = False,
155-
keepdims: bool = False,
156-
skipna: bool = True,
157-
):
158-
pandas_backports.numpy_validate_median(
159-
(),
160-
{"out": out, "overwrite_input": overwrite_input, "keepdims": keepdims},
161-
)
162-
result = pandas_backports.nanmedian(self._ndarray, axis=axis, skipna=skipna)
147+
if axis is None or self.ndim == 1:
148+
return self._box_func(result)
149+
return self._from_backing_data(result)
150+
151+
def median(
152+
self,
153+
*,
154+
axis: Optional[int] = None,
155+
out=None,
156+
overwrite_input: bool = False,
157+
keepdims: bool = False,
158+
skipna: bool = True,
159+
):
160+
if not hasattr(pandas_backports, "numpy_validate_median"):
161+
raise NotImplementedError("Need pandas 1.3 or later to calculate median.")
162+
163+
pandas_backports.numpy_validate_median(
164+
(), {"out": out, "overwrite_input": overwrite_input, "keepdims": keepdims},
165+
)
166+
result = pandas_backports.nanmedian(self._ndarray, axis=axis, skipna=skipna)
167+
if axis is None or self.ndim == 1:
163168
return self._box_func(result)
169+
return self._from_backing_data(result)

tests/unit/test_date.py

+14
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,17 @@ def test_date_parsing(value, expected):
6565
def test_date_parsing_errors(value, error):
6666
with pytest.raises(ValueError, match=error):
6767
pandas.Series([value], dtype="dbdate")
68+
69+
70+
# TODO: skip if median not available
71+
@pytest.mark.parametrize(
72+
"values, expected",
73+
[
74+
(["1970-01-01", "1900-01-01", "2000-01-01"], datetime.date(1970, 1, 1)),
75+
([None, "1900-01-01", None], datetime.date(1900, 1, 1)),
76+
(["2222-02-01", "2222-02-03"], datetime.date(2222, 2, 2)),
77+
],
78+
)
79+
def test_date_median(values, expected):
80+
series = pandas.Series(values, dtype="dbdate")
81+
assert series.median() == expected

0 commit comments

Comments
 (0)