Skip to content

Commit c2ce803

Browse files
committed
BUG: flip left<->right in Index._join_level, GH #547
1 parent 716ebdc commit c2ce803

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

pandas/core/index.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ def _join_level(self, other, level, how='left', return_indexers=False):
637637
flip_order = not isinstance(self, MultiIndex)
638638
if flip_order:
639639
left, right = right, left
640+
how = {'right': 'left', 'left': 'right'}.get(how, how)
640641

641642
level = left._get_level_number(level)
642643

@@ -1860,4 +1861,4 @@ def _ensure_index(index_like):
18601861

18611862
def _validate_join_method(method):
18621863
if method not in ['left', 'right', 'inner', 'outer']:
1863-
raise Exception('do not recognize join method %s' % how)
1864+
raise Exception('do not recognize join method %s' % method)

pandas/tests/test_index.py

+11-10
Original file line numberDiff line numberDiff line change
@@ -1164,23 +1164,24 @@ def _check_how(other, how):
11641164
level='second',
11651165
return_indexers=True)
11661166

1167-
join_index2, ridx2, lidx2 = self.index.join(other, how=how,
1168-
level='second',
1169-
return_indexers=True)
1170-
1171-
self.assert_(join_index.equals(join_index2))
1172-
self.assert_(np.array_equal(lidx, lidx2))
1173-
self.assert_(np.array_equal(ridx, ridx2))
1174-
1175-
exp_level = self.index.levels[1].join(other, how=how)
1167+
exp_level = other.join(self.index.levels[1], how=how)
11761168
self.assert_(join_index.levels[0].equals(self.index.levels[0]))
11771169
self.assert_(join_index.levels[1].equals(exp_level))
11781170

11791171
# pare down levels
11801172
mask = np.array([x[1] in exp_level for x in self.index], dtype=bool)
11811173
exp_values = self.index.values[mask]
11821174
self.assert_(np.array_equal(join_index.values, exp_values))
1183-
self.assert_(np.array_equal(join_index2.values, exp_values))
1175+
1176+
if how in ('outer', 'inner'):
1177+
join_index2, ridx2, lidx2 = \
1178+
self.index.join(other, how=how, level='second',
1179+
return_indexers=True)
1180+
1181+
self.assert_(join_index.equals(join_index2))
1182+
self.assert_(np.array_equal(lidx, lidx2))
1183+
self.assert_(np.array_equal(ridx, ridx2))
1184+
self.assert_(np.array_equal(join_index2.values, exp_values))
11841185

11851186
def _check_all(other):
11861187
_check_how(other, 'outer')

0 commit comments

Comments
 (0)