@@ -274,6 +274,68 @@ def test_concat_NaT_series_dataframe_all_NaT(self, tz1, tz2):
274274 result = concat ([first , second ])
275275 tm .assert_frame_equal (result , expected )
276276
277+ @pytest .mark .parametrize ("unit" , ["ns" , "us" , "ms" , "s" ])
278+ def test_concat_series_columns_nonoverlap_5min_units (self , unit ):
279+ # GH#58471
280+ idx1 = date_range ("2024-01-01" , periods = 3 , freq = "5min" , unit = unit )
281+ idx2 = date_range ("2024-01-02" , periods = 3 , freq = "5min" , unit = unit )
282+ s1 = Series (np .arange (len (idx1 )), index = idx1 , name = "a" )
283+ s2 = Series (np .arange (len (idx2 )), index = idx2 , name = "b" )
284+ result = concat ([s1 , s2 ], axis = 1 )
285+ expected_index = DatetimeIndex (
286+ [
287+ Timestamp ("2024-01-01 00:00:00" ),
288+ Timestamp ("2024-01-01 00:05:00" ),
289+ Timestamp ("2024-01-01 00:10:00" ),
290+ Timestamp ("2024-01-02 00:00:00" ),
291+ Timestamp ("2024-01-02 00:05:00" ),
292+ Timestamp ("2024-01-02 00:10:00" ),
293+ ],
294+ dtype = f"datetime64[{ unit } ]" ,
295+ )
296+ expected_data = np .full ((6 , 2 ), np .nan )
297+ expected_data [:3 , 0 ] = np .arange (3 )
298+ expected_data [3 :, 1 ] = np .arange (3 )
299+ expected = DataFrame (expected_data , index = expected_index , columns = ["a" , "b" ])
300+ tm .assert_frame_equal (result , expected )
301+
302+ @pytest .mark .parametrize ("unit" , ["ns" , "us" , "ms" , "s" ])
303+ def test_concat_series_columns_month_end_units_order_insensitive (self , unit ):
304+ # GH#58471
305+ idx1 = date_range ("2015-01-31" , periods = 3 , freq = "ME" , unit = unit )
306+ idx2 = date_range ("2015-02-28" , periods = 3 , freq = "ME" , unit = unit )
307+ s1 = Series (np .arange (len (idx1 )), index = idx1 , name = "m1" )
308+ s2 = Series (np .arange (len (idx2 )), index = idx2 , name = "m2" )
309+ result1 = concat ([s1 , s2 ], axis = 1 )
310+ result2 = concat ([s2 , s1 ], axis = 1 )
311+
312+ expected_index = DatetimeIndex (
313+ [
314+ Timestamp ("2015-01-31" ),
315+ Timestamp ("2015-02-28" ),
316+ Timestamp ("2015-03-31" ),
317+ Timestamp ("2015-04-30" ),
318+ ],
319+ dtype = f"datetime64[{ unit } ]" ,
320+ )
321+ expected_data = np .full ((4 , 2 ), np .nan )
322+ expected_data [0 , 0 ] = 0
323+ expected_data [1 , 0 ] = 1
324+ expected_data [1 , 1 ] = 0
325+ expected_data [2 , 0 ] = 2
326+ expected_data [2 , 1 ] = 1
327+ expected_data [3 , 1 ] = 2
328+
329+ expected1 = DataFrame (expected_data , index = expected_index , columns = ["m1" , "m2" ])
330+ tm .assert_frame_equal (result1 , expected1 , check_freq = False )
331+
332+ expected2 = DataFrame (
333+ expected_data [:, [1 , 0 ]],
334+ index = expected_index ,
335+ columns = ["m2" , "m1" ],
336+ )
337+ tm .assert_frame_equal (result2 , expected2 , check_freq = False )
338+
277339
278340class TestTimezoneConcat :
279341 def test_concat_tz_series (self ):
0 commit comments