例如,假设我有一列“ a”
我想给每个样本/行指定数量的“回溯”,以获取先前的值。 例如,这是回溯3的结果...
a
0 1
1 2
2 3
3 4
4 5
a a1 a2 a3
0 1 Nan Nan Nan
1 2 1 Nan Nan
2 3 2 1 Nan
3 4 3 2 1
4 5 4 3 2
答案 0 :(得分:3)
将Series.shift
与f-string
一起使用:
n = 3
for c in range(1, n+1):
df[f'a{c}'] = df['a'].shift(c)
print (df)
a a1 a2 a3
0 1 NaN NaN NaN
1 2 1.0 NaN NaN
2 3 2.0 1.0 NaN
3 4 3.0 2.0 1.0
4 5 4.0 3.0 2.0
带有列表理解和concat
的替代项,最后由DataFrame.join
添加到原文:
n = 3
r = range(1, n+1)
df = df.join(pd.concat([df['a'].shift(c) for c in r], axis=1, keys=r).add_prefix('a'))
print (df)
a a1 a2 a3
0 1 NaN NaN NaN
1 2 1.0 NaN NaN
2 3 2.0 1.0 NaN
3 4 3.0 2.0 1.0
4 5 4.0 3.0 2.0