我有一只熊猫df
id v1 v2
1 20.1 30.1
2 32.0 40
3 11.0 12.012
我想添加2个列,以便我的数据框看起来像:
id v1 v2 v1_new v2_new
1 20.1 30.1 32.0 40
2 32.0 40 11.0 12.012
3 11.0 12.012 20.1 30.1
即将下一个连续行添加为上一行中的列,对于最后一行,添加第一行的列填充值。
有没有办法做到这一点?
答案 0 :(得分:2)
使用np.roll
In [793]: df.assign(v1_new=np.roll(df.v1, -1), v2_new=np.roll(df.v2, -1))
Out[793]:
id v1 v2 v1_new v2_new
0 1 20.1 30.100 32.0 40.000
1 2 32.0 40.000 11.0 12.012
2 3 11.0 12.012 20.1 30.100
答案 1 :(得分:1)
供参考,您可以使用np.roll
和df.iloc
实现pd.concat
的通用版本:
In [521]: pd.concat([df1, df1.iloc[:, -2:].transform(np.roll, shift=-1).add_suffix('_new')], 1)
Out[521]:
id v1 v2 v1_new v2_new
0 1 20.1 30.100 32.0 40.000
1 2 32.0 40.000 11.0 12.012
2 3 11.0 12.012 20.1 30.100
这是John Galt's solution的更通用版本,如果您想滚动任意数量的列,则可以使用。