@@ -274,6 +274,51 @@ def test_concat_NaT_series_dataframe_all_NaT(self, tz1, tz2):
274
274
result = concat ([first , second ])
275
275
tm .assert_frame_equal (result , expected )
276
276
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 = 24 * 12 , freq = "5min" , unit = unit )
281
+ idx2 = date_range ("2024-01-02" , periods = 24 * 12 , 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 = date_range (
286
+ "2024-01-01" , "2024-01-02 23:55" , freq = "5min" , unit = unit
287
+ )
288
+ expected_data = np .full ((len (expected_index ), 2 ), np .nan )
289
+ expected_data [: len (idx1 ), 0 ] = np .arange (len (idx1 ))
290
+ expected_data [len (idx1 ) :, 1 ] = np .arange (len (idx2 ))
291
+ expected = DataFrame (expected_data , index = expected_index , columns = ["a" , "b" ])
292
+ tm .assert_frame_equal (result , expected )
293
+
294
+ @pytest .mark .parametrize ("unit" , ["ns" , "us" , "ms" , "s" ])
295
+ def test_concat_series_columns_month_end_units_order_insensitive (self , unit ):
296
+ # GH#58471
297
+ idx1 = date_range (start = "2015-01-31" , end = "2016-01-31" , freq = "ME" , unit = unit )
298
+ idx2 = date_range (start = "2015-02-28" , end = "2016-02-29" , freq = "ME" , unit = unit )
299
+ s1 = Series (np .arange (len (idx1 )), index = idx1 , name = "m1" )
300
+ s2 = Series (np .arange (len (idx2 )), index = idx2 , name = "m2" )
301
+ result1 = concat ([s1 , s2 ], axis = 1 )
302
+ result2 = concat ([s2 , s1 ], axis = 1 )
303
+
304
+ expected_index = idx1 .union (idx2 )
305
+ expected_data = np .full ((len (expected_index ), 2 ), np .nan )
306
+ for i , date in enumerate (expected_index ):
307
+ if date in idx1 :
308
+ expected_data [i , 0 ] = s1 .loc [date ]
309
+ if date in idx2 :
310
+ expected_data [i , 1 ] = s2 .loc [date ]
311
+
312
+ expected1 = DataFrame (expected_data , index = expected_index , columns = ["m1" , "m2" ])
313
+ tm .assert_frame_equal (result1 , expected1 )
314
+
315
+ expected2 = DataFrame (
316
+ expected_data [:, [1 , 0 ]],
317
+ index = expected_index ,
318
+ columns = ["m2" , "m1" ],
319
+ )
320
+ tm .assert_frame_equal (result2 , expected2 )
321
+
277
322
278
323
class TestTimezoneConcat :
279
324
def test_concat_tz_series (self ):
0 commit comments