Skip to content

Commit 54dd18f

Browse files
committed
change after review
1 parent f027cb8 commit 54dd18f

File tree

4 files changed

+23
-47
lines changed

4 files changed

+23
-47
lines changed

pandas/core/reshape/merge.py

+7-37
Original file line numberDiff line numberDiff line change
@@ -8,51 +8,19 @@
88

99
import numpy as np
1010

11-
<<<<<<< HEAD
1211
from pandas._libs import hashtable as libhashtable, join as libjoin, lib
1312
import pandas.compat as compat
1413
from pandas.compat import filter, lzip, map, range, zip
1514
from pandas.errors import MergeError
16-
=======
17-
from pandas import (Categorical, DataFrame,
18-
Index, MultiIndex, Timedelta, Series)
19-
from pandas.core.arrays.categorical import _recode_for_categories
20-
from pandas.core.frame import _merge_doc
21-
from pandas.core.dtypes.common import (
22-
is_datetime64tz_dtype,
23-
is_datetime64_dtype,
24-
needs_i8_conversion,
25-
is_int64_dtype,
26-
is_array_like,
27-
is_categorical_dtype,
28-
is_integer_dtype,
29-
is_float_dtype,
30-
is_number,
31-
is_numeric_dtype,
32-
is_integer,
33-
is_extension_array_dtype,
34-
is_int_or_datetime_dtype,
35-
is_dtype_equal,
36-
is_bool,
37-
is_bool_dtype,
38-
is_list_like,
39-
is_datetimelike,
40-
ensure_int64,
41-
ensure_float64,
42-
ensure_object,
43-
_get_dtype)
44-
from pandas.core.dtypes.missing import na_value_for_dtype
45-
from pandas.core.internals import (items_overlap_with_suffix,
46-
concatenate_block_managers)
47-
>>>>>>> fix bug #GH23020
4815
from pandas.util._decorators import Appender, Substitution
4916

5017
from pandas.core.dtypes.common import (
5118
ensure_float64, ensure_int64, ensure_object, is_array_like, is_bool,
5219
is_bool_dtype, is_categorical_dtype, is_datetime64_dtype,
5320
is_datetime64tz_dtype, is_datetimelike, is_dtype_equal, is_float_dtype,
5421
is_int64_dtype, is_int_or_datetime_dtype, is_integer, is_integer_dtype,
55-
is_list_like, is_number, is_numeric_dtype, needs_i8_conversion)
22+
is_list_like, is_number, is_numeric_dtype, is_extension_array_dtype,
23+
needs_i8_conversion)
5624
from pandas.core.dtypes.missing import isnull, na_value_for_dtype
5725

5826
from pandas import Categorical, DataFrame, Index, MultiIndex, Series, Timedelta
@@ -1551,10 +1519,12 @@ def _factorize_keys(lk, rk, sort=True):
15511519

15521520
lk = ensure_int64(lk.codes)
15531521
rk = ensure_int64(rk)
1554-
elif is_extension_array_dtype(lk) and is_extension_array_dtype(rk):
1522+
elif (is_extension_array_dtype(lk) and
1523+
is_extension_array_dtype(rk) and
1524+
lk.dtype == rk.dtype):
15551525
klass = libhashtable.Factorizer
1556-
lk = ensure_object(lk)
1557-
rk = ensure_object(rk)
1526+
lk, _ = lk._values_for_factorize()
1527+
rk, _ = rk._values_for_factorize()
15581528
elif is_int_or_datetime_dtype(lk) and is_int_or_datetime_dtype(rk):
15591529
klass = libhashtable.Int64Factorizer
15601530
lk = ensure_int64(com.values_from_object(lk))

pandas/tests/extension/base/reshaping.py

+8
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,11 @@ def test_merge(self, data, na_value):
170170
[data[0], data[0], data[1], data[2], na_value],
171171
dtype=data.dtype)})
172172
self.assert_frame_equal(res, exp[['ext', 'int1', 'key', 'int2']])
173+
174+
def test_merge_on_int_array(self, df_merge_on_int_array):
175+
# GH 23020
176+
result = pd.merge(df_merge_on_int_array, df_merge_on_int_array, on='A')
177+
expected = pd.DataFrame({'A': pd.Series([1, 2, np.nan], dtype='Int64'),
178+
'B_x': 1,
179+
'B_y': 1})
180+
self.assert_frame_equal(result, expected, check_dtype=True)

pandas/tests/extension/conftest.py

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import pandas as pd
2+
import numpy as np
13
import operator
24

35
import pytest
@@ -104,3 +106,9 @@ def data_for_grouping():
104106
def box_in_series(request):
105107
"""Whether to box the data in a Series"""
106108
return request.param
109+
110+
111+
@pytest.fixture
112+
def df_merge_on_int_array():
113+
return pd.DataFrame({'A': pd.Series([1, 2, np.nan], dtype='Int64'),
114+
'B': 1})

pandas/tests/reshape/merge/test_merge.py

-10
Original file line numberDiff line numberDiff line change
@@ -1842,16 +1842,6 @@ def test_merging_with_bool_or_int_cateorical_column(self, category_column,
18421842
CDT(categories, ordered=ordered))
18431843
assert_frame_equal(expected, result)
18441844

1845-
def test_merge_on_int_array(self):
1846-
# GH 23020
1847-
df = pd.DataFrame({'A': pd.Series([1, 2, np.nan], dtype='Int64'),
1848-
'B': 1})
1849-
result = pd.merge(df, df, on='A')
1850-
expected = pd.DataFrame({'A': pd.Series([1, 2, np.nan], dtype='Int64'),
1851-
'B_x': 1,
1852-
'B_y': 1})
1853-
assert_frame_equal(result, expected, check_dtype=True)
1854-
18551845

18561846
@pytest.fixture
18571847
def left_df():

0 commit comments

Comments
 (0)