@@ -661,16 +661,13 @@ def _get_concat_axis(self) -> Index:
661661 indexes , self .keys , self .levels , self .names
662662 )
663663
664- self ._maybe_check_integrity (concat_axis )
665-
666- return concat_axis
667-
668- def _maybe_check_integrity (self , concat_index : Index ) -> None :
669664 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 ()
672667 raise ValueError (f"Indexes have overlapping values: { overlap } " )
673668
669+ return concat_axis
670+
674671
675672def _clean_keys_and_objs (
676673 objs : Iterable [Series | DataFrame ] | Mapping [HashableT , Series | DataFrame ],
@@ -768,6 +765,12 @@ def _concat_indexes(indexes) -> Index:
768765 return indexes [0 ].append (indexes [1 :])
769766
770767
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+
771774def _make_concat_multiindex (indexes , keys , levels = None , names = None ) -> MultiIndex :
772775 if (levels is None and isinstance (keys [0 ], tuple )) or (
773776 levels is not None and len (levels ) > 1
@@ -780,6 +783,7 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
780783 _ , levels = factorize_from_iterables (zipped )
781784 else :
782785 levels = [ensure_index (x ) for x in levels ]
786+ validate_unique_levels (levels )
783787 else :
784788 zipped = [keys ]
785789 if names is None :
@@ -789,12 +793,9 @@ def _make_concat_multiindex(indexes, keys, levels=None, names=None) -> MultiInde
789793 levels = [ensure_index (keys ).unique ()]
790794 else :
791795 levels = [ensure_index (x ) for x in levels ]
796+ validate_unique_levels (levels )
792797
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 ):
798799 codes_list = []
799800
800801 # things are potentially different sizes, so compute the exact codes
0 commit comments