diff --git a/pandas/tests/reshape/concat/test_datetimes.py b/pandas/tests/reshape/concat/test_datetimes.py index 0cf3192ea3a74..f026f4aa23319 100644 --- a/pandas/tests/reshape/concat/test_datetimes.py +++ b/pandas/tests/reshape/concat/test_datetimes.py @@ -274,6 +274,51 @@ def test_concat_NaT_series_dataframe_all_NaT(self, tz1, tz2): result = concat([first, second]) tm.assert_frame_equal(result, expected) + @pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"]) + def test_concat_series_columns_nonoverlap_5min_units(self, unit): + # GH#58471 + idx1 = date_range("2024-01-01", periods=24 * 12, freq="5min", unit=unit) + idx2 = date_range("2024-01-02", periods=24 * 12, freq="5min", unit=unit) + s1 = Series(np.arange(len(idx1)), index=idx1, name="a") + s2 = Series(np.arange(len(idx2)), index=idx2, name="b") + result = concat([s1, s2], axis=1) + expected_index = date_range( + "2024-01-01", "2024-01-02 23:55", freq="5min", unit=unit + ) + expected_data = np.full((len(expected_index), 2), np.nan) + expected_data[: len(idx1), 0] = np.arange(len(idx1)) + expected_data[len(idx1) :, 1] = np.arange(len(idx2)) + expected = DataFrame(expected_data, index=expected_index, columns=["a", "b"]) + tm.assert_frame_equal(result, expected) + + @pytest.mark.parametrize("unit", ["ns", "us", "ms", "s"]) + def test_concat_series_columns_month_end_units_order_insensitive(self, unit): + # GH#58471 + idx1 = date_range(start="2015-01-31", end="2016-01-31", freq="ME", unit=unit) + idx2 = date_range(start="2015-02-28", end="2016-02-29", freq="ME", unit=unit) + s1 = Series(np.arange(len(idx1)), index=idx1, name="m1") + s2 = Series(np.arange(len(idx2)), index=idx2, name="m2") + result1 = concat([s1, s2], axis=1) + result2 = concat([s2, s1], axis=1) + + expected_index = idx1.union(idx2) + expected_data = np.full((len(expected_index), 2), np.nan) + for i, date in enumerate(expected_index): + if date in idx1: + expected_data[i, 0] = s1.loc[date] + if date in idx2: + expected_data[i, 1] = s2.loc[date] + + expected1 = DataFrame(expected_data, index=expected_index, columns=["m1", "m2"]) + tm.assert_frame_equal(result1, expected1) + + expected2 = DataFrame( + expected_data[:, [1, 0]], + index=expected_index, + columns=["m2", "m1"], + ) + tm.assert_frame_equal(result2, expected2) + class TestTimezoneConcat: def test_concat_tz_series(self):