Skip to content

Commit 73e7629

Browse files
committed
Handle Day / Tick change
From pandas-dev/pandas#61985
1 parent 2d7e8e1 commit 73e7629

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

dask/dataframe/dask_expr/_util.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ def _calc_maybe_new_divisions(df, periods, freq):
4343

4444
is_offset = isinstance(freq, pd.DateOffset)
4545
if is_offset:
46-
if not isinstance(freq, pd.offsets.Tick):
46+
if not isinstance(freq, (pd.offsets.Tick, pd.offsets.Day)):
4747
# Can't infer divisions on relative or anchored offsets, as
4848
# divisions may now split identical index value.
4949
# (e.g. index_partitions = [[1, 2, 3], [3, 4, 5]])
50+
# As of https://github.com/pandas-dev/pandas/pull/61985
51+
# Day doesn't subclass Tick.
5052
return None # Would need to clear divisions
5153
if df.known_divisions:
5254
divs = pd.Series(range(len(df.divisions)), index=df.divisions)

dask/dataframe/dask_expr/tests/test_collection.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,14 +2461,25 @@ def test_scalar_to_series():
24612461

24622462

24632463
@pytest.mark.parametrize("data_freq, divs1", [("B", False), ("D", True), ("h", True)])
2464-
def test_shift_with_freq_datetime(pdf, data_freq, divs1):
2464+
@pytest.mark.parametrize(
2465+
"freq_divs2", [("s", True), ("W", False), (pd.Timedelta(10, unit="h"), True)]
2466+
)
2467+
@pytest.mark.parametrize("as_series", [True, False])
2468+
def test_shift_with_freq_datetime(pdf, data_freq, divs1, freq_divs2, as_series):
24652469
pdf.index = pd.date_range(start="2020-01-01", periods=len(pdf), freq=data_freq)
24662470
df = from_pandas(pdf, npartitions=4)
2467-
for freq, divs2 in [("s", True), ("W", False), (pd.Timedelta(10, unit="h"), True)]:
2468-
for d, p in [(df, pdf), (df.x, pdf.x)]:
2469-
res = d.shift(2, freq=freq)
2470-
assert_eq(res, p.shift(2, freq=freq))
2471-
assert res.known_divisions == divs2
2471+
2472+
freq, divs2 = freq_divs2
2473+
if as_series:
2474+
pd_obj = pdf["x"]
2475+
dask_obj = df["x"]
2476+
else:
2477+
pd_obj = pdf
2478+
dask_obj = df
2479+
2480+
res = dask_obj.shift(2, freq=freq)
2481+
assert_eq(res, pd_obj.shift(2, freq=freq))
2482+
assert res.known_divisions == divs2
24722483

24732484
res = df.index.shift(2)
24742485
assert_eq(res, df.index.shift(2))

0 commit comments

Comments
 (0)