pandas.DataFrame.shift#
- DataFrame.shift(periods=1, freq=None, axis=0, fill_value=<no_default>, suffix=None)[source]#
按所需的周期数移动索引,并可选择指定时间freq。
当未传递 freq 时,将偏移索引而不重新对齐数据。如果传递了 freq(在这种情况下,索引必须是 date 或 datetime,否则将引发 NotImplementedError),则将使用 periods 和 freq 增加索引。freq 在指定为“infer”时可以推断,只要索引具有 freq 或 inferred_freq 属性。
- 参数:
- periodsint 或 Sequence
要偏移的周期数。可以是正数或负数。如果是一个整数的可迭代对象,数据将按每个整数偏移一次。这相当于一次偏移一个值并连接所有结果帧。结果列将在其列名后附加偏移量。对于多个周期,axis 不能为 1。
- freqDateOffset, tseries.offsets, timedelta, 或 str, optional
要使用的 tseries 模块中的偏移量或时间规则(例如,“EOM”)。如果指定了 freq,则会偏移索引值,但数据不会重新对齐。也就是说,如果您想在偏移时扩展索引并保留原始数据,请使用 freq。如果 freq 指定为“infer”,则将从索引的 freq 或 inferred_freq 属性中推断出来。如果这两个属性都不存在,则会引发 ValueError。
- axis{0 或 ‘index’, 1 或 ‘columns’, None}, 默认为 None
偏移方向。对于 Series,此参数未使用,默认为 0。
- fill_valueobject,可选
用于引入新缺失值标量值。默认值取决于 self 的 dtype。对于布尔和数值 NumPy 数据类型,使用
np.nan。对于 datetime、timedelta 或 period 数据等,使用NaT。对于扩展 dtype,使用self.dtype.na_value。- suffixstr,可选
如果为 str 且 periods 是可迭代对象,则此字符串将添加到每个偏移列名的列名之后和偏移值之前。对于 Series,此参数未使用,默认为 None。
- 返回:
- DataFrame
输入对象的副本,已偏移。
另请参阅
Index.shift移动 Index 的值。
DatetimeIndex.shift偏移 DatetimeIndex 的值。
PeriodIndex.shift偏移 PeriodIndex 的值。
示例
>>> df = pd.DataFrame( ... [[10, 13, 17], [20, 23, 27], [15, 18, 22], [30, 33, 37], [45, 48, 52]], ... columns=["Col1", "Col2", "Col3"], ... index=pd.date_range("2020-01-01", "2020-01-05"), ... ) >>> df Col1 Col2 Col3 2020-01-01 10 13 17 2020-01-02 20 23 27 2020-01-03 15 18 22 2020-01-04 30 33 37 2020-01-05 45 48 52
>>> df.shift(periods=3) Col1 Col2 Col3 2020-01-01 NaN NaN NaN 2020-01-02 NaN NaN NaN 2020-01-03 NaN NaN NaN 2020-01-04 10.0 13.0 17.0 2020-01-05 20.0 23.0 27.0
>>> df.shift(periods=1, axis="columns") Col1 Col2 Col3 2020-01-01 NaN 10 13 2020-01-02 NaN 20 23 2020-01-03 NaN 15 18 2020-01-04 NaN 30 33 2020-01-05 NaN 45 48
>>> df.shift(periods=3, fill_value=0) Col1 Col2 Col3 2020-01-01 0 0 0 2020-01-02 0 0 0 2020-01-03 0 0 0 2020-01-04 10 13 17 2020-01-05 20 23 27
>>> df.shift(periods=3, freq="D") Col1 Col2 Col3 2020-01-04 10 13 17 2020-01-05 20 23 27 2020-01-06 15 18 22 2020-01-07 30 33 37 2020-01-08 45 48 52
>>> df.shift(periods=3, freq="infer") Col1 Col2 Col3 2020-01-04 10 13 17 2020-01-05 20 23 27 2020-01-06 15 18 22 2020-01-07 30 33 37 2020-01-08 45 48 52
>>> df["Col1"].shift(periods=[0, 1, 2]) Col1_0 Col1_1 Col1_2 2020-01-01 10 NaN NaN 2020-01-02 20 10.0 NaN 2020-01-03 15 20.0 10.0 2020-01-04 30 15.0 20.0 2020-01-05 45 30.0 15.0