Skip to content

Commit 3def19b

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

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

pandas/core/generic.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -9974,11 +9974,15 @@ def _agg_by_level(self, name, axis=0, level=0, skipna=True, **kwargs):
99749974
raise ValueError("Must specify 'axis' when aggregating by level.")
99759975
grouped = self.groupby(level=level, axis=axis, sort=False)
99769976
if hasattr(grouped, name) and skipna:
9977-
return getattr(grouped, name)(**kwargs)
9978-
axis = self._get_axis_number(axis)
9979-
method = getattr(type(self), name)
9980-
applyf = lambda x: method(x, axis=axis, skipna=skipna, **kwargs)
9981-
return grouped.aggregate(applyf)
9977+
result = getattr(grouped, name)(**kwargs)
9978+
else:
9979+
axis = self._get_axis_number(axis)
9980+
method = getattr(type(self), name)
9981+
applyf = lambda x: method(x, axis=axis, skipna=skipna, **kwargs)
9982+
result = grouped.aggregate(applyf)
9983+
if isinstance(self, ABCSeries) and self.dtype.name == "boolean":
9984+
return result.astype("boolean")
9985+
return result
99829986

99839987
@classmethod
99849988
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)