@@ -220,8 +220,8 @@ def get_result(self):
220
220
return result
221
221
222
222
def _indicator_pre_merge (self , left , right ):
223
-
224
- columns = left .columns .union (right .columns )
223
+
224
+ columns = left .columns .union (right .columns )
225
225
226
226
for i in ['_left_indicator' , '_right_indicator' ]:
227
227
if i in columns :
@@ -232,12 +232,12 @@ def _indicator_pre_merge(self, left, right):
232
232
left = left .copy ()
233
233
right = right .copy ()
234
234
235
- left ['_left_indicator' ] = 1
236
- left ['_left_indicator' ] = left ['_left_indicator' ].astype ('int8' )
237
-
238
- right ['_right_indicator' ] = 2
239
- right ['_right_indicator' ] = right ['_right_indicator' ].astype ('int8' )
240
-
235
+ left ['_left_indicator' ] = 1
236
+ left ['_left_indicator' ] = left ['_left_indicator' ].astype ('int8' )
237
+
238
+ right ['_right_indicator' ] = 2
239
+ right ['_right_indicator' ] = right ['_right_indicator' ].astype ('int8' )
240
+
241
241
return left , right
242
242
243
243
def _indicator_post_merge (self , result ):
@@ -246,8 +246,8 @@ def _indicator_post_merge(self, result):
246
246
result ['_right_indicator' ] = result ['_right_indicator' ].fillna (0 )
247
247
248
248
result [self .indicator_name ] = Categorical ((result ['_left_indicator' ] + result ['_right_indicator' ]), categories = [1 ,2 ,3 ])
249
- result [self .indicator_name ] = result [self .indicator_name ].cat .rename_categories (['left_only' , 'right_only' , 'both' ])
250
-
249
+ result [self .indicator_name ] = result [self .indicator_name ].cat .rename_categories (['left_only' , 'right_only' , 'both' ])
250
+
251
251
result = result .drop (labels = ['_left_indicator' , '_right_indicator' ], axis = 1 )
252
252
253
253
return result
@@ -261,7 +261,7 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
261
261
continue
262
262
263
263
if name in result :
264
- key_col = result [ name ]
264
+ key_indexer = result . columns . get_loc ( name )
265
265
266
266
if left_indexer is not None and right_indexer is not None :
267
267
@@ -274,9 +274,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
274
274
continue
275
275
276
276
right_na_indexer = right_indexer .take (na_indexer )
277
- key_col .put (
278
- na_indexer , com .take_1d (self .right_join_keys [i ],
279
- right_na_indexer ))
277
+ result .iloc [na_indexer ,key_indexer ] = com .take_1d (self .right_join_keys [i ],
278
+ right_na_indexer )
280
279
elif name in self .right :
281
280
if len (self .right ) == 0 :
282
281
continue
@@ -286,9 +285,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
286
285
continue
287
286
288
287
left_na_indexer = left_indexer .take (na_indexer )
289
- key_col .put (na_indexer , com .take_1d (self .left_join_keys [i ],
290
- left_na_indexer ))
291
-
288
+ result .iloc [na_indexer ,key_indexer ] = com .take_1d (self .left_join_keys [i ],
289
+ left_na_indexer )
292
290
elif left_indexer is not None \
293
291
and isinstance (self .left_join_keys [i ], np .ndarray ):
294
292
@@ -664,10 +662,13 @@ def _right_outer_join(x, y, max_groups):
664
662
665
663
666
664
def _factorize_keys (lk , rk , sort = True ):
665
+ if com .is_datetime64tz_dtype (lk ) and com .is_datetime64tz_dtype (rk ):
666
+ lk = lk .values
667
+ rk = rk .values
667
668
if com .is_int_or_datetime_dtype (lk ) and com .is_int_or_datetime_dtype (rk ):
668
669
klass = _hash .Int64Factorizer
669
- lk = com ._ensure_int64 (lk )
670
- rk = com ._ensure_int64 (rk )
670
+ lk = com ._ensure_int64 (com . _values_from_object ( lk ) )
671
+ rk = com ._ensure_int64 (com . _values_from_object ( rk ) )
671
672
else :
672
673
klass = _hash .Factorizer
673
674
lk = com ._ensure_object (lk )
0 commit comments