Skip to content

Commit 2d77a5c

Browse files
author
Marco Gorelli
committed
pass to _factorize_keys
1 parent a53cc22 commit 2d77a5c

File tree

1 file changed

+6
-12
lines changed

1 file changed

+6
-12
lines changed

pandas/core/reshape/merge.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1292,12 +1292,9 @@ def _get_join_indexers(
12921292
right_keys
12931293
), "left_key and right_keys must be the same length"
12941294

1295-
# bind `sort` arg. of _factorize_keys
1296-
fkeys = partial(_factorize_keys, sort=sort)
1297-
12981295
# get left & right join labels and num. of levels at each location
12991296
mapped = (
1300-
_factorize_keys(left_keys[n], right_keys[n], sort=sort)
1297+
_factorize_keys(left_keys[n], right_keys[n], sort=sort, how=how)
13011298
for n in range(len(left_keys))
13021299
)
13031300
zipped = zip(*mapped)
@@ -1310,19 +1307,14 @@ def _get_join_indexers(
13101307
# `count` is the num. of unique keys
13111308
# set(lkey) | set(rkey) == range(count)
13121309

1313-
# flip left and right keys if performing a right merge
1314-
# to preserve right merge row order (GH 27453)
1315-
if how == "right":
1316-
factorized_rkey, factorized_lkey, count = fkeys(rkey, lkey)
1317-
else:
1318-
factorized_lkey, factorized_rkey, count = fkeys(lkey, rkey)
1310+
lkey, rkey, count = _factorize_keys(lkey, rkey, sort=sort, how=how)
13191311
# preserve left frame order if how == 'left' and sort == False
13201312
kwargs = copy.copy(kwargs)
13211313
if how == "left":
13221314
kwargs["sort"] = sort
13231315
join_func = _join_functions[how]
13241316

1325-
return join_func(factorized_lkey, factorized_rkey, count, **kwargs)
1317+
return join_func(lkey, rkey, count, **kwargs)
13261318

13271319

13281320
def _restore_dropped_levels_multijoin(
@@ -1858,7 +1850,7 @@ def _right_outer_join(x, y, max_groups):
18581850
}
18591851

18601852

1861-
def _factorize_keys(lk, rk, sort=True):
1853+
def _factorize_keys(lk, rk, sort=True, how="inner"):
18621854
# Some pre-processing for non-ndarray lk / rk
18631855
if is_datetime64tz_dtype(lk) and is_datetime64tz_dtype(rk):
18641856
lk = getattr(lk, "_values", lk)._data
@@ -1927,6 +1919,8 @@ def _factorize_keys(lk, rk, sort=True):
19271919
np.putmask(rlab, rmask, count)
19281920
count += 1
19291921

1922+
if how == "right":
1923+
return rlab, llab, count
19301924
return llab, rlab, count
19311925

19321926

0 commit comments

Comments
 (0)