@@ -220,8 +220,8 @@ def get_result(self):
220220 return result
221221
222222 def _indicator_pre_merge (self , left , right ):
223-
224- columns = left .columns .union (right .columns )
223+
224+ columns = left .columns .union (right .columns )
225225
226226 for i in ['_left_indicator' , '_right_indicator' ]:
227227 if i in columns :
@@ -232,12 +232,12 @@ def _indicator_pre_merge(self, left, right):
232232 left = left .copy ()
233233 right = right .copy ()
234234
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+
241241 return left , right
242242
243243 def _indicator_post_merge (self , result ):
@@ -246,8 +246,8 @@ def _indicator_post_merge(self, result):
246246 result ['_right_indicator' ] = result ['_right_indicator' ].fillna (0 )
247247
248248 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+
251251 result = result .drop (labels = ['_left_indicator' , '_right_indicator' ], axis = 1 )
252252
253253 return result
@@ -261,7 +261,7 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
261261 continue
262262
263263 if name in result :
264- key_col = result [ name ]
264+ key_indexer = result . columns . get_loc ( name )
265265
266266 if left_indexer is not None and right_indexer is not None :
267267
@@ -274,9 +274,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
274274 continue
275275
276276 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 )
280279 elif name in self .right :
281280 if len (self .right ) == 0 :
282281 continue
@@ -286,9 +285,8 @@ def _maybe_add_join_keys(self, result, left_indexer, right_indexer):
286285 continue
287286
288287 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 )
292290 elif left_indexer is not None \
293291 and isinstance (self .left_join_keys [i ], np .ndarray ):
294292
@@ -664,10 +662,13 @@ def _right_outer_join(x, y, max_groups):
664662
665663
666664def _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
667668 if com .is_int_or_datetime_dtype (lk ) and com .is_int_or_datetime_dtype (rk ):
668669 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 ) )
671672 else :
672673 klass = _hash .Factorizer
673674 lk = com ._ensure_object (lk )
0 commit comments