@@ -575,6 +575,30 @@ def test_concat_period_other_series3(self):
575575 tm .assert_series_equal (result , expected )
576576 assert result .dtype == "object"
577577
578+ def test_concat_keys_mixed_freq_period_columns (self ):
579+ # GH#51489 concat with keys must not raise IncompatibleFrequency
580+ # when the inputs have PeriodIndex columns with different freq
581+ q_period = pd .period_range ("2022-1-1" , "2022-12-31" , freq = "Q" )
582+ y_period = pd .period_range ("2019-1-1" , "2023-1-1" , freq = "Y" )
583+
584+ q_df = DataFrame ([range (len (q_period ))], columns = q_period )
585+ y_df = DataFrame ([range (len (y_period ))], columns = y_period )
586+
587+ result = concat ([q_df , y_df ], keys = ["Quarterly" , "Yearly" ], axis = 1 )
588+
589+ expected_inner = Index (list (q_period ) + list (y_period ), dtype = object )
590+ expected_columns = MultiIndex .from_arrays (
591+ [
592+ ["Quarterly" ] * len (q_period ) + ["Yearly" ] * len (y_period ),
593+ expected_inner ,
594+ ]
595+ )
596+ expected = DataFrame (
597+ [list (range (len (q_period ))) + list (range (len (y_period )))],
598+ columns = expected_columns ,
599+ )
600+ tm .assert_frame_equal (result , expected )
601+
578602
579603def test_concat_timedelta64_block ():
580604 rng = to_timedelta (np .arange (10 ), unit = "s" )
0 commit comments