Skip to content

Commit 8e21317

Browse files
GH1291 Add BaseOffset for shift operators on Series and DataFrame (#1301)
1 parent ae72ced commit 8e21317

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
892892
def shift(
893893
self,
894894
periods: int | Sequence[int] = ...,
895-
freq: DateOffset | dt.timedelta | _str | None = ...,
895+
freq: BaseOffset | dt.timedelta | _str | None = ...,
896896
axis: Axis = ...,
897897
fill_value: Scalar | NAType | None = ...,
898898
) -> Self: ...

pandas-stubs/core/series.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
11361136
def shift(
11371137
self,
11381138
periods: int | Sequence[int] = ...,
1139-
freq: DateOffset | timedelta | _str | None = ...,
1139+
freq: BaseOffset | timedelta | _str | None = ...,
11401140
axis: Axis = ...,
11411141
fill_value: Scalar | NAType | None = ...,
11421142
) -> Series: ...

tests/series/test_series.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@
6363
from pandas.io.formats.format import EngFormatter
6464
from pandas.tseries.offsets import (
6565
BaseOffset,
66+
BDay,
67+
BQuarterEnd,
68+
MonthEnd,
69+
Week,
6670
YearEnd,
6771
)
6872

@@ -448,6 +452,7 @@ def test_types_sort_values_with_key() -> None:
448452

449453

450454
def test_types_shift() -> None:
455+
"""Test shift operator on series with different arguments."""
451456
s = pd.Series([1, 2, 3], index=pd.date_range("2020", periods=3))
452457
check(assert_type(s.shift(), pd.Series), pd.Series, np.floating)
453458
check(
@@ -457,6 +462,11 @@ def test_types_shift() -> None:
457462
)
458463
check(assert_type(s.shift(-1, fill_value=0), pd.Series), pd.Series, np.integer)
459464
check(assert_type(s.shift(freq="1D"), pd.Series), pd.Series, np.integer)
465+
check(assert_type(s.shift(freq=BDay(1)), pd.Series), pd.Series, np.integer)
466+
check(assert_type(s.shift(freq=BQuarterEnd(5)), pd.Series), pd.Series, np.integer)
467+
check(assert_type(s.shift(freq=MonthEnd(3)), pd.Series), pd.Series, np.integer)
468+
check(assert_type(s.shift(freq=Week(4)), pd.Series), pd.Series, np.integer)
469+
check(assert_type(s.shift(freq=YearEnd(2)), pd.Series), pd.Series, np.integer)
460470

461471

462472
def test_series_pct_change() -> None:

tests/test_frame.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@
6060
from pandas.io.formats.format import EngFormatter
6161
from pandas.io.formats.style import Styler
6262
from pandas.io.parsers import TextFileReader
63+
from pandas.tseries.offsets import (
64+
BDay,
65+
BQuarterEnd,
66+
MonthEnd,
67+
Week,
68+
YearEnd,
69+
)
6370

6471
if TYPE_CHECKING:
6572
from pandas.core.frame import _PandasNamedTuple
@@ -603,6 +610,11 @@ def test_types_shift() -> None:
603610
check(assert_type(df.shift(1), pd.DataFrame), pd.DataFrame)
604611
check(assert_type(df.shift(-1), pd.DataFrame), pd.DataFrame)
605612
check(assert_type(df.shift(freq="1D"), pd.DataFrame), pd.DataFrame)
613+
check(assert_type(df.shift(freq=BDay(1)), pd.DataFrame), pd.DataFrame)
614+
check(assert_type(df.shift(freq=BQuarterEnd(5)), pd.DataFrame), pd.DataFrame)
615+
check(assert_type(df.shift(freq=MonthEnd(3)), pd.DataFrame), pd.DataFrame)
616+
check(assert_type(df.shift(freq=Week(4)), pd.DataFrame), pd.DataFrame)
617+
check(assert_type(df.shift(freq=YearEnd(2)), pd.DataFrame), pd.DataFrame)
606618

607619

608620
def test_types_rank() -> None:

0 commit comments

Comments
 (0)