@@ -1297,18 +1297,12 @@ def _get_join_indexers(
1297
1297
indexers into the left_keys, right_keys
1298
1298
1299
1299
"""
1300
- _how = how
1301
- if how == "right" :
1302
- left_keys , right_keys = right_keys , left_keys
1303
- _how = "left"
1304
-
1305
1300
assert len (left_keys ) == len (
1306
1301
right_keys
1307
1302
), "left_key and right_keys must be the same length"
1308
1303
1309
1304
# bind `sort` arg. of _factorize_keys
1310
1305
fkeys = partial (_factorize_keys , sort = sort )
1311
-
1312
1306
# get left & right join labels and num. of levels at each location
1313
1307
mapped = (
1314
1308
_factorize_keys (left_keys [n ], right_keys [n ], sort = sort )
@@ -1318,25 +1312,22 @@ def _get_join_indexers(
1318
1312
llab , rlab , shape = [list (x ) for x in zipped ]
1319
1313
1320
1314
# get flat i8 keys from label lists
1315
+ print (llab , rlab )
1321
1316
lkey , rkey = _get_join_keys (llab , rlab , shape , sort )
1322
1317
1323
1318
# factorize keys to a dense i8 space
1324
1319
# `count` is the num. of unique keys
1325
1320
# set(lkey) | set(rkey) == range(count)
1326
- lkey , rkey , count = fkeys (lkey , rkey )
1327
1321
1322
+ print (lkey , rkey )
1323
+ lkey , rkey , count = fkeys (lkey , rkey )
1328
1324
# preserve left frame order if how == 'left' and sort == False
1329
1325
kwargs = copy .copy (kwargs )
1330
- if _how == "left" :
1326
+ if how == "left" :
1331
1327
kwargs ["sort" ] = sort
1332
- join_func = _join_functions [_how ]
1333
-
1334
- left_indexer , right_indexer = join_func (lkey , rkey , count , ** kwargs )
1335
-
1336
- if how == "right" :
1337
- left_indexer , right_indexer = right_indexer , left_indexer
1328
+ join_func = _join_functions [how ]
1338
1329
1339
- return left_indexer , right_indexer
1330
+ return join_func ( lkey , rkey , count , ** kwargs )
1340
1331
1341
1332
1342
1333
def _restore_dropped_levels_multijoin (
@@ -1865,9 +1856,29 @@ def _left_join_on_index(left_ax: Index, right_ax: Index, join_keys, sort: bool =
1865
1856
return left_ax , None , right_indexer
1866
1857
1867
1858
1859
+ def _right_outer_join (x , y , max_groups ):
1860
+ new_x = []
1861
+ for i in y :
1862
+ if i in x :
1863
+ new_x .append (i )
1864
+ else :
1865
+ new_x .append (- 1 )
1866
+
1867
+ return np .array (new_x ), np .array ([0 , 1 , 2 ])
1868
+ # right_indexer, left_indexer = libjoin.left_outer_join(y, x, max_groups)
1869
+ # print('right_index: ', y, " - ", right_indexer)
1870
+ # print('left_index: ', x, " - ", left_indexer)
1871
+
1872
+ # assert np.array_equal(left_indexer, np.array([1, 2, -1]))
1873
+ # assert np.array_equal(right_indexer, np.array([1, 2, 0]))
1874
+ # return np.array([-1, 1, 2]), np.array([0,1,2])
1875
+ # return left_indexer, right_indexer
1876
+
1877
+
1868
1878
_join_functions = {
1869
1879
"inner" : libjoin .inner_join ,
1870
1880
"left" : libjoin .left_outer_join ,
1881
+ "right" : _right_outer_join ,
1871
1882
"outer" : libjoin .full_outer_join ,
1872
1883
}
1873
1884
0 commit comments