Skip to content

Commit 22a6b37

Browse files
committed
fix bug for default level behavior
1 parent 0fadaa9 commit 22a6b37

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

pandas/core/generic.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4126,7 +4126,11 @@ class animal locomotion
41264126
index = self.index
41274127

41284128
if isinstance(index, MultiIndex):
4129-
loc, new_index = index._get_loc_level(key, level=0)
4129+
loc, new_index = index.get_loc_level(
4130+
key,
4131+
level=range(len(key)),
4132+
drop_level=drop_level
4133+
)
41304134
if not drop_level:
41314135
if lib.is_integer(loc):
41324136
# Slice index must be an integer or None

pandas/tests/series/indexing/test_xs.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import numpy as np
22
import pytest
3+
import debugpy
34

45
from pandas import (
6+
DataFrame,
57
MultiIndex,
68
Series,
79
date_range,
@@ -80,3 +82,16 @@ def test_xs_key_as_list(self):
8082

8183
with pytest.raises(TypeError, match="list keys are not supported"):
8284
ser.xs(["a"], axis=0, drop_level=False)
85+
86+
def test_xs_default_level(self):
87+
# GH#59098
88+
df = DataFrame(dict(i=[1,2,3], j=[1,1,2], x=[10, 100, 1000])).set_index(["i", "j"])
89+
key = (1, 1)
90+
91+
# Both scenarios should return DataFrame
92+
result_with_level = df.xs(key, drop_level=False, level=list(range(len(key))))
93+
result_with_default = df.xs(key, drop_level=False)
94+
95+
assert type(result_with_default) == DataFrame
96+
assert type(result_with_level) == type(result_with_default)
97+
tm.assert_equal(result_with_level, result_with_default)

0 commit comments

Comments
 (0)