Skip to content

Commit c5a1348

Browse files
authored
TST: Multiindex slicing with NaNs, unexpected results for #25154 (#39356)
1 parent f02d4cc commit c5a1348

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

pandas/tests/indexing/multiindex/test_getitem.py

+79
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,85 @@ def test_frame_getitem_nan_multiindex(nulls_fixture):
229229
tm.assert_frame_equal(result, expected)
230230

231231

232+
@pytest.mark.parametrize(
233+
"indexer,expected",
234+
[
235+
(
236+
(["b"], ["bar", np.nan]),
237+
(
238+
DataFrame(
239+
[[2, 3], [5, 6]],
240+
columns=MultiIndex.from_tuples([("b", "bar"), ("b", np.nan)]),
241+
dtype="int64",
242+
)
243+
),
244+
),
245+
(
246+
(["a", "b"]),
247+
(
248+
DataFrame(
249+
[[1, 2, 3], [4, 5, 6]],
250+
columns=MultiIndex.from_tuples(
251+
[("a", "foo"), ("b", "bar"), ("b", np.nan)]
252+
),
253+
dtype="int64",
254+
)
255+
),
256+
),
257+
(
258+
(["b"]),
259+
(
260+
DataFrame(
261+
[[2, 3], [5, 6]],
262+
columns=MultiIndex.from_tuples([("b", "bar"), ("b", np.nan)]),
263+
dtype="int64",
264+
)
265+
),
266+
),
267+
(
268+
(["b"], ["bar"]),
269+
(
270+
DataFrame(
271+
[[2], [5]],
272+
columns=MultiIndex.from_tuples([("b", "bar")]),
273+
dtype="int64",
274+
)
275+
),
276+
),
277+
(
278+
(["b"], [np.nan]),
279+
(
280+
DataFrame(
281+
[[3], [6]],
282+
columns=MultiIndex(
283+
codes=[[1], [-1]], levels=[["a", "b"], ["bar", "foo"]]
284+
),
285+
dtype="int64",
286+
)
287+
),
288+
),
289+
(("b", np.nan), Series([3, 6], dtype="int64", name=("b", np.nan))),
290+
],
291+
)
292+
def test_frame_getitem_nan_cols_multiindex(
293+
indexer,
294+
expected,
295+
nulls_fixture,
296+
):
297+
# Slicing MultiIndex including levels with nan values, for more information
298+
# see GH#25154
299+
df = DataFrame(
300+
[[1, 2, 3], [4, 5, 6]],
301+
columns=MultiIndex.from_tuples(
302+
[("a", "foo"), ("b", "bar"), ("b", nulls_fixture)]
303+
),
304+
dtype="int64",
305+
)
306+
307+
result = df.loc[:, indexer]
308+
tm.assert_equal(result, expected)
309+
310+
232311
# ----------------------------------------------------------------------------
233312
# test indexing of DataFrame with multi-level Index with duplicates
234313
# ----------------------------------------------------------------------------

0 commit comments

Comments
 (0)