@@ -549,6 +549,36 @@ def test_union_duplicates(index, request):
549
549
tm .assert_index_equal (result , expected )
550
550
551
551
552
+ def test_union_keep_dtype_precision (any_real_numeric_dtype ):
553
+ # GH#48498
554
+ arr1 = Series ([4 , 1 , 1 ], dtype = any_real_numeric_dtype )
555
+ arr2 = Series ([1 , 4 ], dtype = any_real_numeric_dtype )
556
+ midx = MultiIndex .from_arrays ([arr1 , [2 , 1 , 1 ]], names = ["a" , None ])
557
+ midx2 = MultiIndex .from_arrays ([arr2 , [1 , 2 ]], names = ["a" , None ])
558
+
559
+ result = midx .union (midx2 )
560
+ expected = MultiIndex .from_arrays (
561
+ ([Series ([1 , 1 , 4 ], dtype = any_real_numeric_dtype ), [1 , 1 , 2 ]]),
562
+ names = ["a" , None ],
563
+ )
564
+ tm .assert_index_equal (result , expected )
565
+
566
+
567
+ def test_union_keep_ea_dtype_with_na (any_numeric_ea_dtype ):
568
+ # GH#48498
569
+
570
+ arr1 = Series ([4 , pd .NA ], dtype = any_numeric_ea_dtype )
571
+ arr2 = Series ([1 , pd .NA ], dtype = any_numeric_ea_dtype )
572
+ midx = MultiIndex .from_arrays ([arr1 , [2 , 1 ]], names = ["a" , None ])
573
+ midx2 = MultiIndex .from_arrays ([arr2 , [1 , 2 ]])
574
+ result = midx .union (midx2 )
575
+ # Expected is actually off and should contain (1, 1) too. See GH#37222
576
+ expected = MultiIndex .from_arrays (
577
+ [Series ([4 , pd .NA , pd .NA ], dtype = any_numeric_ea_dtype ), [2 , 1 , 2 ]]
578
+ )
579
+ tm .assert_index_equal (result , expected )
580
+
581
+
552
582
@pytest .mark .parametrize (
553
583
"levels1, levels2, codes1, codes2, names" ,
554
584
[
0 commit comments