@@ -710,7 +710,13 @@ def _get_concat_axis_dataframe(
710710 if keys is None :
711711 if levels is not None :
712712 raise ValueError ("levels supported only when keys is not None" )
713- concat_axis = _concat_indexes (indexes )
713+ interesected_indexes = indexes [0 ].intersection (indexes [1 ])
714+ if interesected_indexes is None :
715+ concat_axis = _concat_indexes (indexes )
716+ else :
717+ indexes = _rename_duplicated_axis_names (indexes , interesected_indexes )
718+ concat_axis = _concat_indexes (indexes )
719+
714720 else :
715721 concat_axis = _make_concat_multiindex (indexes , keys , levels , names )
716722
@@ -720,6 +726,27 @@ def _get_concat_axis_dataframe(
720726
721727 return concat_axis
722728
729+ def _rename_duplicated_axis_names (indexes : list [Index ], interesected_indexes : Index ) -> list [Index ]:
730+ """
731+ Rename duplicated axis names if there are duplicated values in the indexes.
732+
733+ Args:
734+ indexes (Index): Indexes that should be concatenated and have duplicated values.
735+ interesected_indexes (Index): The set of duplicated values in the indexes.
736+
737+ Returns:
738+ list[Index]: New names for axis without duplicated values.
739+ """
740+ new_indexes = []
741+ for number , index in enumerate (indexes ):
742+ for i in range (len (index )):
743+ if index [i ] in interesected_indexes :
744+ new_index = index .drop (index [i ])
745+ index = new_index .insert (i , f"{ index [i ]} _{ number } " ) # New values inserted in the new index
746+ new_indexes .append (index )
747+
748+ return new_indexes
749+
723750
724751def _clean_keys_and_objs (
725752 objs : Iterable [Series | DataFrame ] | Mapping [HashableT , Series | DataFrame ],
0 commit comments