Skip to content

Commit f5b2857

Browse files
committed
allow set_index to set a multiindex from a tuple, not just a list
1 parent 18a3eec commit f5b2857

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

pandas/core/frame.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5913,7 +5913,7 @@ def set_index(
59135913
"""
59145914
inplace = validate_bool_kwarg(inplace, "inplace")
59155915
self._check_inplace_and_allows_duplicate_labels(inplace)
5916-
if not isinstance(keys, list):
5916+
if not is_list_like(keys):
59175917
keys = [keys]
59185918

59195919
err_msg = (

pandas/tests/copy_view/index/test_index.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ def test_set_index_series():
4444
ser.iloc[0] = 100
4545
tm.assert_index_equal(df.index, expected)
4646

47+
class TestSetMultiIndex:
48+
df = DataFrame({"a": [1, 2], "b": 1.5, "c": [3, 4]})
49+
50+
def test_from_list(self):
51+
df = self.df.set_index(["a", "b"])
52+
self._assert(df)
53+
54+
def test_from_tuple(self):
55+
df = self.df.set_index(("a", "b"))
56+
self._assert(df)
57+
58+
def _assert(self, df):
59+
assert isinstance(df.index, pd.MultiIndex)
60+
assert df.index.names == ["a", "b"]
61+
4762

4863
def test_assign_index_as_series():
4964
df = DataFrame({"a": [1, 2], "b": 1.5})

0 commit comments

Comments
 (0)