Skip to content

Commit

Permalink
BUG: flip left<->right in Index._join_level, GH #547
Browse files Browse the repository at this point in the history
  • Loading branch information
wesm committed Dec 29, 2011
1 parent 716ebdc commit c2ce803
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
3 changes: 2 additions & 1 deletion pandas/core/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,7 @@ def _join_level(self, other, level, how='left', return_indexers=False):
flip_order = not isinstance(self, MultiIndex)
if flip_order:
left, right = right, left
how = {'right': 'left', 'left': 'right'}.get(how, how)

level = left._get_level_number(level)

Expand Down Expand Up @@ -1860,4 +1861,4 @@ def _ensure_index(index_like):

def _validate_join_method(method):
if method not in ['left', 'right', 'inner', 'outer']:
raise Exception('do not recognize join method %s' % how)
raise Exception('do not recognize join method %s' % method)
21 changes: 11 additions & 10 deletions pandas/tests/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -1164,23 +1164,24 @@ def _check_how(other, how):
level='second',
return_indexers=True)

join_index2, ridx2, lidx2 = self.index.join(other, how=how,
level='second',
return_indexers=True)

self.assert_(join_index.equals(join_index2))
self.assert_(np.array_equal(lidx, lidx2))
self.assert_(np.array_equal(ridx, ridx2))

exp_level = self.index.levels[1].join(other, how=how)
exp_level = other.join(self.index.levels[1], how=how)
self.assert_(join_index.levels[0].equals(self.index.levels[0]))
self.assert_(join_index.levels[1].equals(exp_level))

# pare down levels
mask = np.array([x[1] in exp_level for x in self.index], dtype=bool)
exp_values = self.index.values[mask]
self.assert_(np.array_equal(join_index.values, exp_values))
self.assert_(np.array_equal(join_index2.values, exp_values))

if how in ('outer', 'inner'):
join_index2, ridx2, lidx2 = \
self.index.join(other, how=how, level='second',
return_indexers=True)

self.assert_(join_index.equals(join_index2))
self.assert_(np.array_equal(lidx, lidx2))
self.assert_(np.array_equal(ridx, ridx2))
self.assert_(np.array_equal(join_index2.values, exp_values))

def _check_all(other):
_check_how(other, 'outer')
Expand Down

0 comments on commit c2ce803

Please sign in to comment.