@@ -1095,8 +1095,12 @@ def _reindex_and_concat(
1095
1095
left = self .left [:]
1096
1096
right = self .right [:]
1097
1097
1098
+ keep_left = [x for x in self .left_on if isinstance (x , str )]
1099
+ keep_right = [x for x in self .right_on if isinstance (x , str )]
1100
+
1098
1101
llabels , rlabels = _items_overlap_with_suffix (
1099
- self .left ._info_axis , self .right ._info_axis , self .suffixes , self .force_suffixes
1102
+ self .left ._info_axis , self .right ._info_axis , self .suffixes ,
1103
+ self .force_suffixes , keep_left , keep_right
1100
1104
)
1101
1105
1102
1106
if left_indexer is not None and not is_range_indexer (left_indexer , len (left )):
@@ -3020,7 +3024,8 @@ def _validate_operand(obj: DataFrame | Series) -> DataFrame:
3020
3024
3021
3025
3022
3026
def _items_overlap_with_suffix (
3023
- left : Index , right : Index , suffixes : Suffixes , force_suffixes : bool = False
3027
+ left : Index , right : Index , suffixes : Suffixes , force_suffixes : bool ,
3028
+ keep_left : list , keep_right : list
3024
3029
) -> tuple [Index , Index ]:
3025
3030
"""
3026
3031
Suffixes type validation.
@@ -3035,11 +3040,12 @@ def _items_overlap_with_suffix(
3035
3040
f"Passing 'suffixes' as a { type (suffixes )} , is not supported. "
3036
3041
"Provide 'suffixes' as a tuple instead."
3037
3042
)
3038
-
3039
- if not force_suffixes :
3040
- to_rename = left .intersection (right )
3041
- else :
3043
+
3044
+ if force_suffixes :
3042
3045
to_rename = left .union (right )
3046
+ else :
3047
+ to_rename = left .intersection (right )
3048
+ keep_left , keep_right = [], []
3043
3049
3044
3050
if len (to_rename ) == 0 :
3045
3051
return left , right
@@ -3049,7 +3055,7 @@ def _items_overlap_with_suffix(
3049
3055
if not lsuffix and not rsuffix :
3050
3056
raise ValueError (f"columns overlap but no suffix specified: { to_rename } " )
3051
3057
3052
- def renamer (x , suffix : str | None ):
3058
+ def renamer (x , suffix : str | None , keep : list ):
3053
3059
"""
3054
3060
Rename the left and right indices.
3055
3061
@@ -3065,12 +3071,12 @@ def renamer(x, suffix: str | None):
3065
3071
-------
3066
3072
x : renamed column name
3067
3073
"""
3068
- if x in to_rename and suffix is not None :
3074
+ if x in to_rename and suffix is not None and ( x not in keep ) :
3069
3075
return f"{ x } { suffix } "
3070
3076
return x
3071
3077
3072
- lrenamer = partial (renamer , suffix = lsuffix )
3073
- rrenamer = partial (renamer , suffix = rsuffix )
3078
+ lrenamer = partial (renamer , suffix = lsuffix , keep = keep_left )
3079
+ rrenamer = partial (renamer , suffix = rsuffix , keep = keep_right )
3074
3080
3075
3081
llabels = left ._transform_index (lrenamer )
3076
3082
rlabels = right ._transform_index (rrenamer )
0 commit comments