|
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 (
|
13 | 12 | is_categorical_dtype,
|
@@ -2753,24 +2752,28 @@ def test_merge_arrow_and_numpy_dtypes(dtype):
|
2753 | 2752 | tm.assert_frame_equal(result, expected)
|
2754 | 2753 |
|
2755 | 2754 |
|
2756 |
| -@pytest.mark.parametrize("tzinfo", [None, pytz.timezone("America/Chicago")]) |
2757 |
| -def test_merge_datetime_different_resolution(tzinfo): |
| 2755 | +@pytest.mark.parametrize("how", ["inner", "left", "outer", "right"]) |
| 2756 | +@pytest.mark.parametrize("tz", [None, "America/Chicago"]) |
| 2757 | +def test_merge_datetime_different_resolution(tz, how): |
2758 | 2758 | # https://github.com/pandas-dev/pandas/issues/53200
|
2759 |
| - df1 = DataFrame( |
2760 |
| - { |
2761 |
| - "t": [pd.Timestamp(2023, 5, 12, tzinfo=tzinfo, unit="ns")], |
2762 |
| - "a": [1], |
2763 |
| - } |
2764 |
| - ) |
2765 |
| - df2 = df1.copy() |
| 2759 | + vals = [ |
| 2760 | + pd.Timestamp(2023, 5, 12, tz=tz), |
| 2761 | + pd.Timestamp(2023, 5, 13, tz=tz), |
| 2762 | + pd.Timestamp(2023, 5, 14, tz=tz), |
| 2763 | + ] |
| 2764 | + df1 = DataFrame({"t": vals[:2], "a": [1.0, 2.0]}) |
| 2765 | + df1["t"] = df1["t"].dt.as_unit("ns") |
| 2766 | + df2 = DataFrame({"t": vals[1:], "b": [1.0, 2.0]}) |
2766 | 2767 | df2["t"] = df2["t"].dt.as_unit("s")
|
2767 | 2768 |
|
2768 |
| - expected = DataFrame( |
2769 |
| - { |
2770 |
| - "t": [pd.Timestamp(2023, 5, 12, tzinfo=tzinfo)], |
2771 |
| - "a_x": [1], |
2772 |
| - "a_y": [1], |
2773 |
| - } |
2774 |
| - ) |
2775 |
| - result = df1.merge(df2, on="t") |
| 2769 | + expected = DataFrame({"t": vals, "a": [1.0, 2.0, np.nan], "b": [np.nan, 1.0, 2.0]}) |
| 2770 | + expected["t"] = expected["t"].dt.as_unit("ns") |
| 2771 | + if how == "inner": |
| 2772 | + expected = expected.iloc[[1]].reset_index(drop=True) |
| 2773 | + elif how == "left": |
| 2774 | + expected = expected.iloc[[0, 1]] |
| 2775 | + elif how == "right": |
| 2776 | + expected = expected.iloc[[1, 2]].reset_index(drop=True) |
| 2777 | + |
| 2778 | + result = df1.merge(df2, on="t", how=how) |
2776 | 2779 | tm.assert_frame_equal(result, expected)
|
0 commit comments