|
7 | 7 |
|
8 | 8 | import numpy as np
|
9 | 9 | import pytest
|
10 |
| -import pytz |
11 | 10 |
|
12 | 11 | from pandas.core.dtypes.common import is_object_dtype
|
13 | 12 | from pandas.core.dtypes.dtypes import CategoricalDtype
|
@@ -2776,26 +2775,30 @@ def test_merge_arrow_and_numpy_dtypes(dtype):
|
2776 | 2775 | tm.assert_frame_equal(result, expected)
|
2777 | 2776 |
|
2778 | 2777 |
|
2779 |
| -@pytest.mark.parametrize("tzinfo", [None, pytz.timezone("America/Chicago")]) |
2780 |
| -def test_merge_datetime_different_resolution(tzinfo): |
| 2778 | +@pytest.mark.parametrize("how", ["inner", "left", "outer", "right"]) |
| 2779 | +@pytest.mark.parametrize("tz", [None, "America/Chicago"]) |
| 2780 | +def test_merge_datetime_different_resolution(tz, how): |
2781 | 2781 | # https://github.com/pandas-dev/pandas/issues/53200
|
2782 |
| - df1 = DataFrame( |
2783 |
| - { |
2784 |
| - "t": [pd.Timestamp(2023, 5, 12, tzinfo=tzinfo, unit="ns")], |
2785 |
| - "a": [1], |
2786 |
| - } |
2787 |
| - ) |
2788 |
| - df2 = df1.copy() |
| 2782 | + vals = [ |
| 2783 | + pd.Timestamp(2023, 5, 12, tz=tz), |
| 2784 | + pd.Timestamp(2023, 5, 13, tz=tz), |
| 2785 | + pd.Timestamp(2023, 5, 14, tz=tz), |
| 2786 | + ] |
| 2787 | + df1 = DataFrame({"t": vals[:2], "a": [1.0, 2.0]}) |
| 2788 | + df1["t"] = df1["t"].dt.as_unit("ns") |
| 2789 | + df2 = DataFrame({"t": vals[1:], "b": [1.0, 2.0]}) |
2789 | 2790 | df2["t"] = df2["t"].dt.as_unit("s")
|
2790 | 2791 |
|
2791 |
| - expected = DataFrame( |
2792 |
| - { |
2793 |
| - "t": [pd.Timestamp(2023, 5, 12, tzinfo=tzinfo)], |
2794 |
| - "a_x": [1], |
2795 |
| - "a_y": [1], |
2796 |
| - } |
2797 |
| - ) |
2798 |
| - result = df1.merge(df2, on="t") |
| 2792 | + expected = DataFrame({"t": vals, "a": [1.0, 2.0, np.nan], "b": [np.nan, 1.0, 2.0]}) |
| 2793 | + expected["t"] = expected["t"].dt.as_unit("ns") |
| 2794 | + if how == "inner": |
| 2795 | + expected = expected.iloc[[1]].reset_index(drop=True) |
| 2796 | + elif how == "left": |
| 2797 | + expected = expected.iloc[[0, 1]] |
| 2798 | + elif how == "right": |
| 2799 | + expected = expected.iloc[[1, 2]].reset_index(drop=True) |
| 2800 | + |
| 2801 | + result = df1.merge(df2, on="t", how=how) |
2799 | 2802 | tm.assert_frame_equal(result, expected)
|
2800 | 2803 |
|
2801 | 2804 |
|
|
0 commit comments