首页 > 解决方案 > 将前面的 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

标签: pythonpandas

解决方案


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

推荐阅读