diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 7e6461f0fab5e..183267efd8170 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -627,7 +627,7 @@ def _fast_intersect(self, other, sort): def _can_fast_intersect(self, other: Self) -> bool: # Note: we only get here with len(self)> 0 and len(other)> 0 - if self.freq is None: + if self.freq is None or self.freq == "C": return False elif other.freq != self.freq: diff --git a/pandas/tests/indexes/datetimes/test_setops.py b/pandas/tests/indexes/datetimes/test_setops.py index 7a68cb867c94e..20920c131232a 100644 --- a/pandas/tests/indexes/datetimes/test_setops.py +++ b/pandas/tests/indexes/datetimes/test_setops.py @@ -7,6 +7,7 @@ import numpy as np import pytest +from pandas._libs.tslibs.timedeltas import Timedelta import pandas.util._test_decorators as td import pandas as pd @@ -709,7 +710,6 @@ def test_intersection_bug(self): b = bdate_range("12/10/2011", "12/20/2011", freq="C") result = a.intersection(b) tm.assert_index_equal(result, b) - assert result.freq == b.freq @pytest.mark.parametrize( "tz", [None, "UTC", "Europe/Berlin", timezone(timedelta(hours=-1))] @@ -757,3 +757,16 @@ def test_intersection_non_nano_rangelike(): freq="D", ) tm.assert_index_equal(result, expected) + + +def test_cday_intersection_empty(): + # GH#44025 + off = pd.offsets.CDay(1, normalize=False) + ts = Timestamp("2021-10-13 09:00") + ts2 = ts + Timedelta("1 hour") + + dti1 = date_range(start=ts, periods=10, freq=off) + dti2 = date_range(start=ts2, periods=10, freq=off) + result = dti1.intersection(dti2) + expected = DatetimeIndex([], dtype="datetime64[ns]") + tm.assert_index_equal(result, expected)