@@ -1283,34 +1283,39 @@ def _get_join_indexers(left_keys, right_keys, sort=False, how="inner", **kwargs)
1283
1283
indexers into the left_keys, right_keys
1284
1284
1285
1285
"""
1286
+ _how = how
1287
+ if how == "right" :
1288
+ left_keys , right_keys = right_keys , left_keys
1289
+ _how = "left"
1290
+
1286
1291
assert len (left_keys ) == len (
1287
1292
right_keys
1288
1293
), "left_key and right_keys must be the same length"
1289
1294
1290
1295
# bind `sort` arg. of _factorize_keys
1291
1296
fkeys = partial (_factorize_keys , sort = sort )
1292
- print (left_keys , right_keys )
1293
1297
# get left & right join labels and num. of levels at each location
1294
1298
llab , rlab , shape = map (list , zip (* map (fkeys , left_keys , right_keys )))
1295
1299
1296
1300
# get flat i8 keys from label lists
1297
- print (llab , rlab )
1298
1301
lkey , rkey = _get_join_keys (llab , rlab , shape , sort )
1299
1302
1300
1303
# factorize keys to a dense i8 space
1301
1304
# `count` is the num. of unique keys
1302
1305
# set(lkey) | set(rkey) == range(count)
1303
-
1304
- print (lkey , rkey )
1305
1306
lkey , rkey , count = fkeys (lkey , rkey )
1306
- print (lkey , rkey )
1307
1307
# preserve left frame order if how == 'left' and sort == False
1308
1308
kwargs = copy .copy (kwargs )
1309
- if how == "left" :
1309
+ if _how == "left" :
1310
1310
kwargs ["sort" ] = sort
1311
- join_func = _join_functions [how ]
1311
+ join_func = _join_functions [_how ]
1312
+
1313
+ left_indexer , right_indexer = join_func (lkey , rkey , count , ** kwargs )
1312
1314
1313
- return join_func (lkey , rkey , count , ** kwargs )
1315
+ if how == "right" :
1316
+ left_indexer , right_indexer = right_indexer , left_indexer
1317
+
1318
+ return left_indexer , right_indexer
1314
1319
1315
1320
1316
1321
def _restore_dropped_levels_multijoin (
@@ -1831,29 +1836,9 @@ def _left_join_on_index(left_ax, right_ax, join_keys, sort=False):
1831
1836
return left_ax , None , right_indexer
1832
1837
1833
1838
1834
- def _right_outer_join (x , y , max_groups ):
1835
- new_x = []
1836
- for i in y :
1837
- if i in x :
1838
- new_x .append (i )
1839
- else :
1840
- new_x .append (- 1 )
1841
-
1842
- return np .array (new_x ), np .array ([0 , 1 , 2 ])
1843
- # right_indexer, left_indexer = libjoin.left_outer_join(y, x, max_groups)
1844
- # print('right_index: ', y, " - ", right_indexer)
1845
- # print('left_index: ', x, " - ", left_indexer)
1846
-
1847
- # assert np.array_equal(left_indexer, np.array([1, 2, -1]))
1848
- # assert np.array_equal(right_indexer, np.array([1, 2, 0]))
1849
- # return np.array([-1, 1, 2]), np.array([0,1,2])
1850
- # return left_indexer, right_indexer
1851
-
1852
-
1853
1839
_join_functions = {
1854
1840
"inner" : libjoin .inner_join ,
1855
1841
"left" : libjoin .left_outer_join ,
1856
- "right" : _right_outer_join ,
1857
1842
"outer" : libjoin .full_outer_join ,
1858
1843
}
1859
1844
0 commit comments