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

时间:2017-08-23 11:06:37

标签: python pandas dataframe concatenation

我有一只熊猫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

即将下一个连续行添加为上一行中的列,对于最后一行,添加第一行的列填充值。

有没有办法做到这一点?

2 个答案:

答案 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.rolldf.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的更通用版本,如果您想滚动任意数量的列,则可以使用。