Skip to content

Commit bd5ecc3

Browse files
authored
Can't combine DatetimeIndex MultiIndex with numeric MultiIndex (#42143)
1 parent 27e56f7 commit bd5ecc3

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

pandas/tests/reshape/concat/test_index.py

+49
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,52 @@ def test_concat_multiindex_dfs_with_deepcopy(self):
257257
tm.assert_frame_equal(result_copy, expected)
258258
result_no_copy = concat(example_dict, names=["testname"])
259259
tm.assert_frame_equal(result_no_copy, expected)
260+
261+
@pytest.mark.parametrize(
262+
"mi1_list",
263+
[
264+
[["a"], range(2)],
265+
[["b"], np.arange(2.0, 4.0)],
266+
[["c"], ["A", "B"]],
267+
[["d"], pd.date_range(start="2017", end="2018", periods=2)],
268+
],
269+
)
270+
@pytest.mark.parametrize(
271+
"mi2_list",
272+
[
273+
[["a"], range(2)],
274+
[["b"], np.arange(2.0, 4.0)],
275+
[["c"], ["A", "B"]],
276+
[["d"], pd.date_range(start="2017", end="2018", periods=2)],
277+
],
278+
)
279+
def test_concat_with_various_multiindex_dtypes(
280+
self, mi1_list: list, mi2_list: list
281+
):
282+
# GitHub #23478
283+
mi1 = MultiIndex.from_product(mi1_list)
284+
mi2 = MultiIndex.from_product(mi2_list)
285+
286+
df1 = DataFrame(np.zeros((1, len(mi1))), columns=mi1)
287+
df2 = DataFrame(np.zeros((1, len(mi2))), columns=mi2)
288+
289+
if mi1_list[0] == mi2_list[0]:
290+
expected_mi = MultiIndex(
291+
levels=[mi1_list[0], list(mi1_list[1])],
292+
codes=[[0, 0, 0, 0], [0, 1, 0, 1]],
293+
)
294+
else:
295+
expected_mi = MultiIndex(
296+
levels=[
297+
mi1_list[0] + mi2_list[0],
298+
list(mi1_list[1]) + list(mi2_list[1]),
299+
],
300+
codes=[[0, 0, 1, 1], [0, 1, 2, 3]],
301+
)
302+
303+
expected_df = DataFrame(np.zeros((1, len(expected_mi))), columns=expected_mi)
304+
305+
with tm.assert_produces_warning(None):
306+
result_df = concat((df1, df2), axis=1)
307+
308+
tm.assert_frame_equal(expected_df, result_df)

0 commit comments

Comments
 (0)