@@ -133,21 +133,23 @@ def test_getitem_interval_with_nans(self, frame_or_series, indexer_sl):
133
133
class TestIntervalIndexInsideMultiIndex :
134
134
def test_mi_intervalindex_slicing_with_scalar (self ):
135
135
# GH#27456
136
+ ii = IntervalIndex .from_arrays (
137
+ [0 , 1 , 10 , 11 , 0 , 1 , 10 , 11 ], [1 , 2 , 11 , 12 , 1 , 2 , 11 , 12 ], name = "MP"
138
+ )
136
139
idx = pd .MultiIndex .from_arrays (
137
140
[
138
141
pd .Index (["FC" , "FC" , "FC" , "FC" , "OWNER" , "OWNER" , "OWNER" , "OWNER" ]),
139
142
pd .Index (
140
143
["RID1" , "RID1" , "RID2" , "RID2" , "RID1" , "RID1" , "RID2" , "RID2" ]
141
144
),
142
- IntervalIndex .from_arrays (
143
- [0 , 1 , 10 , 11 , 0 , 1 , 10 , 11 ], [1 , 2 , 11 , 12 , 1 , 2 , 11 , 12 ]
144
- ),
145
+ ii ,
145
146
]
146
147
)
147
148
148
149
idx .names = ["Item" , "RID" , "MP" ]
149
150
df = DataFrame ({"value" : [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]})
150
151
df .index = idx
152
+
151
153
query_df = DataFrame (
152
154
{
153
155
"Item" : ["FC" , "OWNER" , "FC" , "OWNER" , "OWNER" ],
@@ -161,5 +163,13 @@ def test_mi_intervalindex_slicing_with_scalar(self):
161
163
idx = pd .MultiIndex .from_arrays ([query_df .Item , query_df .RID , query_df .MP ])
162
164
query_df .index = idx
163
165
result = df .value .loc [query_df .index ]
164
- expected = Series ([1 , 6 , 2 , 8 , 7 ], index = idx , name = "value" )
166
+
167
+ # the IntervalIndex level is indexed with floats, which map to
168
+ # the intervals containing them. Matching the behavior we would get
169
+ # with _only_ an IntervalIndex, we get an IntervalIndex level back.
170
+ sliced_level = ii .take ([0 , 1 , 1 , 3 , 2 ])
171
+ expected_index = pd .MultiIndex .from_arrays (
172
+ [idx .get_level_values (0 ), idx .get_level_values (1 ), sliced_level ]
173
+ )
174
+ expected = Series ([1 , 6 , 2 , 8 , 7 ], index = expected_index , name = "value" )
165
175
tm .assert_series_equal (result , expected )
0 commit comments