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