Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v1.1.5.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ including other versions of pandas.

Fixed regressions
~~~~~~~~~~~~~~~~~
-
- Fixed regression in :meth:`Series.groupby` raising when the :class:`Index` of the :class:`Series` had a tuple as its name (:issue:`37755`)
-

.. ---------------------------------------------------------------------------
Expand Down
6 changes: 3 additions & 3 deletions pandas/core/series.py
Original file line number Diff line number Diff line change
Expand Up @@ -900,7 +900,7 @@ def __getitem__(self, key):

return result

except KeyError:
except (KeyError, TypeError):
if isinstance(key, tuple) and isinstance(self.index, MultiIndex):
# We still have the corner case where a tuple is a key
# in the first level of our MultiIndex
Expand Down Expand Up @@ -964,7 +964,7 @@ def _get_values_tuple(self, key):
return result

if not isinstance(self.index, MultiIndex):
raise ValueError("key of type tuple not found and not a MultiIndex")
raise KeyError("key of type tuple not found and not a MultiIndex")

# If key is contained, would have returned by now
indexer, new_index = self.index.get_loc_level(key)
Expand Down Expand Up @@ -1020,7 +1020,7 @@ def __setitem__(self, key, value):

except TypeError as err:
if isinstance(key, tuple) and not isinstance(self.index, MultiIndex):
raise ValueError(
raise KeyError(
"key of type tuple not found and not a MultiIndex"
) from err

Expand Down
10 changes: 10 additions & 0 deletions pandas/tests/groupby/test_groupby.py
Original file line number Diff line number Diff line change
Expand Up @@ -2146,3 +2146,13 @@ def test_groupby_duplicate_columns():
result = df.groupby([0, 0, 0, 0]).min()
expected = DataFrame([["e", "a", 1]], columns=["A", "B", "B"])
tm.assert_frame_equal(result, expected)


def test_groupby_series_with_tuple_name():
# GH 37755
s = Series([1, 2, 3, 4], index=[1, 1, 2, 2], name=("a", "a"))
s.index.name = ("b", "b")
result = s.groupby(level=0).last()
expected = Series([2, 4], index=[1, 2], name=("a", "a"))
expected.index.name = ("b", "b")
tm.assert_series_equal(result, expected)
4 changes: 2 additions & 2 deletions pandas/tests/series/indexing/test_indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,9 +327,9 @@ def test_loc_setitem_2d_to_1d_raises():
def test_basic_getitem_setitem_corner(datetime_series):
# invalid tuples, e.g. td.ts[:, None] vs. td.ts[:, 2]
msg = "key of type tuple not found and not a MultiIndex"
with pytest.raises(ValueError, match=msg):
with pytest.raises(KeyError, match=msg):
datetime_series[:, 2]
with pytest.raises(ValueError, match=msg):
with pytest.raises(KeyError, match=msg):
datetime_series[:, 2] = 2

# weird lists. [slice(0, 5)] will work but not two slices
Expand Down