将数据帧与其列的循环移位子集连接起来

2021-12-08 05:32:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一只熊猫

id    v1       v2
 1    20.1    30.1
 2    32.0    40
 3    11.0    12.012

我想再添加两列,使我的数据帧看起来像:

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

即在前一行中添加下一个连续行作为列,在最后一行中添加第一行的列填充值。你知道吗

有什么办法吗?你知道吗

2条回答
网友
1楼 ·

使用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
网友
2楼 ·

作为参考,您可以使用df.ilocpd.concat实现np.roll的通用版本:

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的一个更通用的版本,如果您想滚动任意数量的列,它就可以工作。你知道吗

相关问题