Pandas DataFrame DataFrame.shift() 函数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.shift() 语法
  2. 示例代码:DataFrame.shift() 函数沿行移动
  3. 示例代码:DataFrame.shift() 函数沿列移动
  4. 示例代码:DataFrame.shift 方法,参数为 fill_value
Pandas DataFrame DataFrame.shift() 函数

Pandas DataFrame.shift 方法用于将 DataFrame 的索引按指定的周期数移位,时间频率可选。

pandas.DataFrame.shift() 语法

DataFrame.shift(periods=1, freq=None, axis=0, fill_value=None)

参数

periods 整数。决定移动索引的周期数,可以是负数,也可以是正数
freq DateOffsettseries.offsetstimedeltastr。可选参数,用于在不调整数据的情况下移动索引值
axis 沿着行(axis=0)或列(axis=1)移动
fill_value 用于新引入的缺失值的标量值

返回值

它返回一个带有移位索引值的 DataFrame 对象。

示例代码:DataFrame.shift() 函数沿行移动

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

shifted_df=df.shift(periods=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X    Y
0  NaN  NaN
1  1.0  4.0
2  2.0  1.0

这里,我们将 periods 的值设置为 1,这将使 DataFrame 的行从顶部向底部移动 1 个单位。

在向底部移动的同时,最上面的行成为空缺,默认由 NaN 值填充。

如果我们想将行从底部向顶部移动,我们可以将 periods 参数设置为负值。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

shifted_df=df.shift(periods=-2)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X    Y
0  3.0  8.0
1  NaN  NaN
2  NaN  NaN

它将行从底部向顶部移动,周期为 2

示例代码:DataFrame.shift() 函数沿列移动

如果我们想移动沿列轴移动,我们在 shift() 方法中设置 axis=1

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)
shifted_df=df.shift(periods=1,axis=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
    X    Y
0 NaN  1.0
1 NaN  2.0
2 NaN  3.0

在这里,我们将 periods 的值设置为 1,这将使 DataFrame 的列轴从左向右移动 1 个单位。

如果我们想将列轴从右向左移动,我们为 periods 参数设置一个负值。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

shifted_df=df.shift(periods=-1,axis=1)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
     X   Y
0  4.0 NaN
1  1.0 NaN
2  8.0 NaN

它将列轴从右向左移动了 1 个周期。

示例代码:DataFrame.shift 方法,参数为 fill_value

在前面的例子中,移位后的缺失值默认用 NaN 来填充,我们也可以通过使用 fill_value 参数用其他值而不是 NaN 来填充。我们也可以通过使用 fill_value 参数用其他值而不是 NaN 来填充缺失值。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

shifted_df=df.shift(periods=-1,
                    axis=1,
                    fill_value=4)
print("Shifted DataFrame")
print(shifted_df)

输出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Shifted DataFrame
   X  Y
0  4  4
1  1  4
2  8  4

它将所有由 shift() 方法创建的缺失值用 4 填充。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn