@@ -661,16 +661,13 @@ def _get_concat_axis(self) -> Index:
661
661
indexes , self .keys , self .levels , self .names
662
662
)
663
663
664
- self ._maybe_check_integrity (concat_axis )
665
-
666
- return concat_axis
667
-
668
- def _maybe_check_integrity (self , concat_index : Index ) -> None :
669
664
if self .verify_integrity :
670
- if not concat_index .is_unique :
671
- overlap = concat_index [ concat_index .duplicated ()].unique ()
665
+ if not concat_axis .is_unique :
666
+ overlap = concat_axis [ concat_axis .duplicated ()].unique ()
672
667
raise ValueError (f"Indexes have overlapping values: { overlap } " )
673
668
669
+ return concat_axis
670
+
674
671
675
672
def _clean_keys_and_objs (
676
673
objs : Iterable [Series | DataFrame ] | Mapping [HashableT , Series | DataFrame ],
@@ -768,6 +765,12 @@ def _concat_indexes(indexes) -> Index:
768
765
return indexes [0 ].append (indexes [1 :])
769
766
770
767
768
+ def validate_unique_levels (levels : list [Index ]) -> None :
769
+ for level in levels :
770
+ if not level .is_unique :
771
+ raise ValueError (f"Level values not unique: { level .tolist ()} " )
772
+
773
+
771
774
def _make_concat_multiindex (indexes , keys , levels = None , names = None ) -> MultiIndex :
772
775
if (levels is None and isinstance (keys [0 ], tuple )) or (
773
776
levels is not None and len (levels ) > 1
@@ -780,6 +783,7 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
780
783
_ , levels = factorize_from_iterables (zipped )
781
784
else :
782
785
levels = [ensure_index (x ) for x in levels ]
786
+ validate_unique_levels (levels )
783
787
else :
784
788
zipped = [keys ]
785
789
if names is None :
@@ -789,12 +793,9 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
789
793
levels = [ensure_index (keys ).unique ()]
790
794
else :
791
795
levels = [ensure_index (x ) for x in levels ]
796
+ validate_unique_levels (levels )
792
797
793
- for level in levels :
794
- if not level .is_unique :
795
- raise ValueError (f"Level values not unique: { level .tolist ()} " )
796
-
797
- if not all_indexes_same (indexes ) or not all (level .is_unique for level in levels ):
798
+ if not all_indexes_same (indexes ):
798
799
codes_list = []
799
800
800
801
# things are potentially different sizes, so compute the exact codes
0 commit comments