diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index 3a2a6c1dde7c8..9557eb616b833 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -1085,6 +1085,12 @@ def _get_arithmetic_result_freq(self, other) -> BaseOffset | None: # e.g. TestTimedelta64ArithmeticUnsorted::test_timedelta # Day is unambiguously 24h return self.freq + elif ( + lib.is_np_dtype(self.dtype, "M") + and isinstance(other, Timestamp) + and isinstance(self.freq, Day) + ): + return self.freq return None diff --git a/pandas/tests/indexes/datetimes/test_arithmetic.py b/pandas/tests/indexes/datetimes/test_arithmetic.py index ba9f82f1064ca..1c19133fff483 100644 --- a/pandas/tests/indexes/datetimes/test_arithmetic.py +++ b/pandas/tests/indexes/datetimes/test_arithmetic.py @@ -63,3 +63,14 @@ def test_add_dti_day(self): result = (dti + dti.freq)[:-1] expected = dti[1:] tm.assert_index_equal(result, expected) + + def test_sub_timestamp_preserves_day_freq(self): + # GH#62094 + dti = date_range("2021-01-01", periods=5, freq="D") + ts = Timestamp("2020-01-01") + + result = dti - ts + + # The one crucial assertion: + assert isinstance(result, TimedeltaIndex) + assert result.freq == dti.freq