Skip to content

Commit 41449d6

Browse files
authored
BUG: DataFrame.shift shows different behavior for axis=1 when freq is specified (#47051)
1 parent 19dbef0 commit 41449d6

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

doc/source/whatsnew/v1.4.3.rst

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Fixed regressions
2222
- Fixed regression in :func:`read_csv` with ``index_col=False`` identifying first row as index names when ``header=None`` (:issue:`46955`)
2323
- Fixed regression in :meth:`.DataFrameGroupBy.agg` when used with list-likes or dict-likes and ``axis=1`` that would give incorrect results; now raises ``NotImplementedError`` (:issue:`46995`)
2424
- Fixed regression in :meth:`DataFrame.resample` and :meth:`DataFrame.rolling` when used with list-likes or dict-likes and ``axis=1`` that would raise an unintuitive error message; now raises ``NotImplementedError`` (:issue:`46904`)
25+
- Fixed regression in :meth:`DataFrame.shift` when ``axis`` is ``columns`` and ``fill_value`` is absent, ``freq`` is ignored (:issue:`47039`)
2526

2627
.. ---------------------------------------------------------------------------
2728

pandas/core/frame.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -5506,7 +5506,13 @@ def shift(
55065506
axis = self._get_axis_number(axis)
55075507

55085508
ncols = len(self.columns)
5509-
if axis == 1 and periods != 0 and fill_value is lib.no_default and ncols > 0:
5509+
if (
5510+
axis == 1
5511+
and periods != 0
5512+
and freq is None
5513+
and fill_value is lib.no_default
5514+
and ncols > 0
5515+
):
55105516
# We will infer fill_value to match the closest column
55115517

55125518
# Use a column that we know is valid for our column's dtype GH#38434

pandas/tests/frame/methods/test_shift.py

+10
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,16 @@ def test_shift_named_axis(self):
259259
result = df.shift(1, axis="columns")
260260
tm.assert_frame_equal(result, expected)
261261

262+
def test_shift_other_axis_with_freq(self, datetime_frame):
263+
obj = datetime_frame.T
264+
offset = offsets.BDay()
265+
266+
# GH#47039
267+
shifted = obj.shift(5, freq=offset, axis=1)
268+
assert len(shifted) == len(obj)
269+
unshifted = shifted.shift(-5, freq=offset, axis=1)
270+
tm.assert_equal(unshifted, obj)
271+
262272
def test_shift_bool(self):
263273
df = DataFrame({"high": [True, False], "low": [False, False]})
264274
rs = df.shift(1)

0 commit comments

Comments
 (0)