Skip to content

Commit 5d6f9f0

Browse files
committed
Preserving dtype in Series.any/all function with level keyword #33449
1 parent c6c5367 commit 5d6f9f0

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

pandas/core/generic.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -9972,13 +9972,16 @@ def pct_change(
99729972
def _agg_by_level(self, name, axis=0, level=0, skipna=True, **kwargs):
99739973
if axis is None:
99749974
raise ValueError("Must specify 'axis' when aggregating by level.")
9975+
returnDtype = "bool"
9976+
if self.dtype.name == "boolean":
9977+
returnDtype = "boolean"
99759978
grouped = self.groupby(level=level, axis=axis, sort=False)
99769979
if hasattr(grouped, name) and skipna:
9977-
return getattr(grouped, name)(**kwargs)
9980+
return (getattr(grouped, name)(**kwargs)).astype(returnDtype)
99789981
axis = self._get_axis_number(axis)
99799982
method = getattr(type(self), name)
99809983
applyf = lambda x: method(x, axis=axis, skipna=skipna, **kwargs)
9981-
return grouped.aggregate(applyf)
9984+
return (grouped.aggregate(applyf)).astype(returnDtype)
99829985

99839986
@classmethod
99849987
def _add_numeric_operations(cls):

pandas/tests/reductions/test_reductions.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -912,8 +912,13 @@ def test_all_any_boolean(self):
912912
index=[0, 0, 1, 1, 2, 2],
913913
dtype="boolean",
914914
)
915-
tm.assert_series_equal(s.all(level=0), Series([False, True, False]))
916-
tm.assert_series_equal(s.any(level=0), Series([False, True, True]))
915+
result = s.all(level=0)
916+
expected = Series([False, True, False], dtype="boolean")
917+
tm.assert_series_equal(result, expected)
918+
919+
result = s.any(level=0)
920+
expected = Series([False, True, True], dtype="boolean")
921+
tm.assert_series_equal(result, expected)
917922

918923
def test_timedelta64_analytics(self):
919924

0 commit comments

Comments
 (0)