python - 将前面的 X 行变成额外的列 [Pandas]
问题描述
例如,假设我有一列“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
解决方案
Series.shift
与s 一起使用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