Skip to content

Commit 25b7a9e

Browse files
authored
GH987 Add limit_area parameter in ffill and bfill methods (#1028)
* add limit_area parameter in ffill and bfill methods * add limit_area parameter to Series bfill and ffill methods * add limit_area parameter to Series bfill and ffill methods * remove irrelevant definition of series bfill
1 parent 8d9be32 commit 25b7a9e

File tree

4 files changed

+30
-10
lines changed

4 files changed

+30
-10
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1656,6 +1656,7 @@ class DataFrame(NDFrame, OpsMixin):
16561656
axis: Axis | None = ...,
16571657
inplace: Literal[True],
16581658
limit: int | None = ...,
1659+
limit_area: Literal["inside", "outside"] | None = ...,
16591660
downcast: dict | None = ...,
16601661
) -> None: ...
16611662
@overload
@@ -1665,6 +1666,7 @@ class DataFrame(NDFrame, OpsMixin):
16651666
axis: Axis | None = ...,
16661667
inplace: Literal[False] = ...,
16671668
limit: int | None = ...,
1669+
limit_area: Literal["inside", "outside"] | None = ...,
16681670
downcast: dict | None = ...,
16691671
) -> DataFrame: ...
16701672
def clip(
@@ -1736,6 +1738,7 @@ class DataFrame(NDFrame, OpsMixin):
17361738
axis: Axis | None = ...,
17371739
inplace: Literal[True],
17381740
limit: int | None = ...,
1741+
limit_area: Literal["inside", "outside"] | None = ...,
17391742
downcast: dict | None = ...,
17401743
) -> None: ...
17411744
@overload
@@ -1745,6 +1748,7 @@ class DataFrame(NDFrame, OpsMixin):
17451748
axis: Axis | None = ...,
17461749
inplace: Literal[False] = ...,
17471750
limit: int | None = ...,
1751+
limit_area: Literal["inside", "outside"] | None = ...,
17481752
downcast: dict | None = ...,
17491753
) -> DataFrame: ...
17501754
def filter(

pandas-stubs/core/series.pyi

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,6 +1300,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
13001300
axis: AxisIndex | None = ...,
13011301
inplace: Literal[True],
13021302
limit: int | None = ...,
1303+
limit_area: Literal["inside", "outside"] | None = ...,
13031304
downcast: dict | None = ...,
13041305
) -> None: ...
13051306
@overload
@@ -1309,6 +1310,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
13091310
axis: AxisIndex | None = ...,
13101311
inplace: Literal[False] = ...,
13111312
limit: int | None = ...,
1313+
limit_area: Literal["inside", "outside"] | None = ...,
13121314
downcast: dict | None = ...,
13131315
) -> Series[S1]: ...
13141316
@overload
@@ -1318,6 +1320,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
13181320
axis: AxisIndex | None = ...,
13191321
inplace: Literal[True],
13201322
limit: int | None = ...,
1323+
limit_area: Literal["inside", "outside"] | None = ...,
13211324
downcast: dict | None = ...,
13221325
) -> None: ...
13231326
@overload
@@ -1327,18 +1330,9 @@ class Series(IndexOpsMixin[S1], NDFrame):
13271330
axis: AxisIndex | None = ...,
13281331
inplace: Literal[False] = ...,
13291332
limit: int | None = ...,
1333+
limit_area: Literal["inside", "outside"] | None = ...,
13301334
downcast: dict | None = ...,
13311335
) -> Series[S1]: ...
1332-
@overload
1333-
def bfill(
1334-
self,
1335-
*,
1336-
value: S1 | dict | Series[S1] | DataFrame,
1337-
axis: AxisIndex = ...,
1338-
inplace: _bool = ...,
1339-
limit: int | None = ...,
1340-
downcast: dict | None = ...,
1341-
) -> Series[S1] | None: ...
13421336
def interpolate(
13431337
self,
13441338
method: InterpolateOptions = ...,

tests/test_frame.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2328,15 +2328,25 @@ def test_types_ffill() -> None:
23282328
df = pd.DataFrame([[1, 2, 3]])
23292329
check(assert_type(df.ffill(), pd.DataFrame), pd.DataFrame)
23302330
check(assert_type(df.ffill(inplace=False), pd.DataFrame), pd.DataFrame)
2331+
check(
2332+
assert_type(df.ffill(inplace=False, limit_area="inside"), pd.DataFrame),
2333+
pd.DataFrame,
2334+
)
23312335
assert assert_type(df.ffill(inplace=True), None) is None
2336+
assert assert_type(df.ffill(inplace=True, limit_area="outside"), None) is None
23322337

23332338

23342339
def test_types_bfill() -> None:
23352340
# GH 44
23362341
df = pd.DataFrame([[1, 2, 3]])
23372342
check(assert_type(df.bfill(), pd.DataFrame), pd.DataFrame)
23382343
check(assert_type(df.bfill(inplace=False), pd.DataFrame), pd.DataFrame)
2344+
check(
2345+
assert_type(df.bfill(inplace=False, limit_area="inside"), pd.DataFrame),
2346+
pd.DataFrame,
2347+
)
23392348
assert assert_type(df.bfill(inplace=True), None) is None
2349+
assert assert_type(df.bfill(inplace=True, limit_area="outside"), None) is None
23402350

23412351

23422352
def test_types_replace() -> None:

tests/test_series.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,7 +1160,13 @@ def test_types_bfill() -> None:
11601160
s1 = pd.Series([1, 2, 3])
11611161
check(assert_type(s1.bfill(), "pd.Series[int]"), pd.Series, np.integer)
11621162
check(assert_type(s1.bfill(inplace=False), "pd.Series[int]"), pd.Series, np.integer)
1163+
check(
1164+
assert_type(s1.bfill(inplace=False, limit_area="inside"), "pd.Series[int]"),
1165+
pd.Series,
1166+
np.integer,
1167+
)
11631168
assert assert_type(s1.bfill(inplace=True), None) is None
1169+
assert assert_type(s1.bfill(inplace=True, limit_area="outside"), None) is None
11641170

11651171

11661172
def test_types_ewm() -> None:
@@ -1205,7 +1211,13 @@ def test_types_ffill() -> None:
12051211
s1 = pd.Series([1, 2, 3])
12061212
check(assert_type(s1.ffill(), "pd.Series[int]"), pd.Series, np.integer)
12071213
check(assert_type(s1.ffill(inplace=False), "pd.Series[int]"), pd.Series, np.integer)
1214+
check(
1215+
assert_type(s1.ffill(inplace=False, limit_area="inside"), "pd.Series[int]"),
1216+
pd.Series,
1217+
np.integer,
1218+
)
12081219
assert assert_type(s1.ffill(inplace=True), None) is None
1220+
assert assert_type(s1.ffill(inplace=True, limit_area="outside"), None) is None
12091221

12101222

12111223
def test_types_as_type() -> None:

0 commit comments

Comments
 (0)