Skip to content

Commit fd00bb9

Browse files
ogriseladamklein
authored andcommitted
FIX: handle overlap when explicit left or right keys are passed explicitly
1 parent 461b77b commit fd00bb9

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

pandas/tools/merge.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def get_result(self):
7777
join_index, left_indexer, right_indexer = self._get_join_info()
7878

7979
# this is a bit kludgy
80-
ldata, rdata = self._get_merge_data(self.join_names)
80+
ldata, rdata = self._get_merge_data()
8181

8282
# TODO: more efficiently handle group keys to avoid extra consolidation!
8383
join_op = _BlockJoinOperation([ldata, rdata], join_index,
@@ -154,13 +154,19 @@ def _get_join_info(self):
154154

155155
return join_index, left_indexer, right_indexer
156156

157-
def _get_merge_data(self, join_names):
157+
def _get_merge_data(self):
158158
"""
159159
Handles overlapping column names etc.
160160
"""
161161
ldata, rdata = self.left._data, self.right._data
162162
lsuf, rsuf = self.suffixes
163-
exclude_names = [x for x in join_names if x is not None]
163+
exclude_names = set(x for x in self.join_names if x is not None)
164+
if self.left_on is not None:
165+
exclude_names -= set(c.name if hasattr(c, 'name') else c
166+
for c in self.left_on)
167+
if self.right_on is not None:
168+
exclude_names -= set(c.name if hasattr(c, 'name') else c
169+
for c in self.right_on)
164170
ldata, rdata = ldata._maybe_rename_join(rdata, lsuf, rsuf,
165171
exclude=exclude_names,
166172
copydata=False)

0 commit comments

Comments
 (0)