pandas.DataFrame.shift #

数据框。shift ( period = 1 , freq = None , axis = 0 , fill_value = _NoDefault.no_default , suffix = None ) [来源] #

使用可选的时间频率将索引移动所需的周期数。

freq未传递时,移动索引而不重新对齐数据。如果传递freq(在这种情况下,索引必须是日期或日期时间,否则将引发 NotImplementedError ) ,将使用句点和freq增加索引。当指定为“infer”时,只要在索引中设置 freq 或 inferred_freq 属性,就可以推断freq 。

参数
周期整数或序列

要转换的周期数。可以是正值,也可以是负值。如果是整数的可迭代,则数据将按每个整数移动一次。这相当于一次移动一个值并连接所有结果帧。生成的列将在其列名称后添加移位后缀。对于多个周期,轴不得为 1。

freq DateOffset、tseries.offsets、timedelta 或 str,可选

从 tseries 模块或时间规则使用的偏移量(例如“EOM”)。如果指定了freq,则索引值会移动,但数据不会重新对齐。也就是说,如果您想在移动时扩展索引并保留原始数据,请使用freq 。如果freq被指定为“infer”,那么它将从索引的 freq 或 inferred_freq 属性中推断出来。如果这两个属性都不存在,则会抛出 ValueError。

axis {0 或 'index', 1 或 'columns', None}, 默认 None

改变方向。对于系列,此参数未使用,默认为 0。

fill_value对象,可选

用于新引入的缺失值的标量值。默认值取决于self的数据类型。对于数字数据,np.nan使用。对于日期时间、时间增量或周期数据等,NaT使用。对于扩展数据类型,self.dtype.na_value使用。

后缀str,可选

如果 str 和 period 是可迭代的,则将其添加在列名称之后和每个移位列名称的移位值之前。

返回
数据框

输入对象的副本,已移动。

也可以看看

Index.shift

索引的移位值。

DatetimeIndex.shift

移动 DatetimeIndex 的值。

PeriodIndex.shift

移动PeriodIndex 的值。

例子

>>> df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45],
...                    "Col2": [13, 23, 18, 33, 48],
...                    "Col3": [17, 27, 22, 37, 52]},
...                   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