📅  最后修改于: 2023-12-03 14:46:30.241000             🧑  作者: Mango
DataFrame.shift()
方法是 pandas 库的一个数据重塑方法,它主要用于将 DataFrame 中的数据按轴方向移动指定的偏移量。
DataFrame.shift(periods=1, freq=None, axis=0, fill_value=None)
periods
: 必需参数。移动的偏移量,可以是正数或负数。freq
: 可选参数。可用于指定移位的频率。默认值为 None,表示不使用时间序列偏移量。axis
: 可选参数。指定沿着哪个轴移动数据,默认值为 0。fill_value
: 可选参数。指定用于填充移动后空缺的值,默认为 None。返回经过偏移位移的 DataFrame 对象。
我们可以简单地通过移动数据来计算 DataFrame 中每个数字与其前一个数字之间的差异。
import pandas as pd
data = {'col_1': [1, 2, 4, 8], 'col_2': [2, 4, 8, 16]}
df = pd.DataFrame(data)
# 移动数据并计算差异
shifted = df.shift(1)
diff = df - shifted
print(diff)
以上代码将输出:
col_1 col_2
0 NaN NaN
1 1.0 2.0
2 2.0 4.0
3 4.0 8.0
我们可以使用 freq
参数指定时间序列的标签来移动时间序列数据。
import pandas as pd
data = {'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04'],
'col_1': [1, 2, 4, 8],
'col_2': [2, 4, 8, 16]}
df = pd.DataFrame(data)
# 将 date 列设置为 DatetimeIndex
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
df.set_index('date', inplace=True)
# 移动数据
shifted = df.shift(1, freq=pd.DateOffset(days=2))
print(shifted)
以上代码将将 col_1
和 col_2
列向下移动 2 天,输出如下:
col_1 col_2
date
2021-12-30 NaN NaN
2021-12-31 NaN NaN
2022-01-01 1.0 2.0
2022-01-02 2.0 4.0