如何在Pandas DataFrame中移动列

roo*_*oot 87 python dataframe pandas

我想在Pandas中移动一列DataFrame,但是我没有找到一种方法来从文档中完成它而不重写整个DF.有谁知道怎么做?数据帧:

##    x1   x2
##0  206  214
##1  226  234
##2  245  253
##3  265  272
##4  283  291
Run Code Online (Sandbox Code Playgroud)

期望的输出:

##    x1   x2
##0  206  nan
##1  226  214
##2  245  234
##3  265  253
##4  283  272
##5  nan  291
Run Code Online (Sandbox Code Playgroud)

eum*_*iro 145

In [18]: a
Out[18]: 
   x1  x2
0   0   5
1   1   6
2   2   7
3   3   8
4   4   9

In [19]: a.x2 = a.x2.shift(1)

In [20]: a
Out[20]: 
   x1  x2
0   0 NaN
1   1   5
2   2   6
3   3   7
4   4   8
Run Code Online (Sandbox Code Playgroud)

  • 结果缺少## 5.在使用shift时,pandas有一种简单的方法可以扩展索引吗? (7认同)
  • @Johan您是否尝试过在移入末尾添加一个空行? (2认同)

Ayu*_*ain 10

你需要在df.shift这里使用。
df.shift(i)将整个数据帧i向下移动一个单位。

所以,对于i = 1

输入:

    x1   x2  
0  206  214  
1  226  234  
2  245  253  
3  265  272    
4  283  291
Run Code Online (Sandbox Code Playgroud)

输出:

    x1   x2
0  Nan  Nan   
1  206  214  
2  226  234  
3  245  253  
4  265  272 
Run Code Online (Sandbox Code Playgroud)

因此,运行此脚本以获得预期的输出:

    x1   x2  
0  206  214  
1  226  234  
2  245  253  
3  265  272    
4  283  291
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用 stackoverflow。如果您提供有关如何使用它的一些解释,您的回答将更有帮助。 (3认同)
  • 你又失去了OP明确想要的一行#5 (3认同)

Kay*_*tig 7

让我们从您的示例中定义数据框

>>> df = pd.DataFrame([[206, 214], [226, 234], [245, 253], [265, 272], [283, 291]], 
    columns=[1, 2])
>>> df
     1    2
0  206  214
1  226  234
2  245  253
3  265  272
4  283  291
Run Code Online (Sandbox Code Playgroud)

然后你可以操作第二列的索引

>>> df[2].index = df[2].index+1
Run Code Online (Sandbox Code Playgroud)

最后重新组合单列

>>> pd.concat([df[1], df[2]], axis=1)
       1      2
0  206.0    NaN
1  226.0  214.0
2  245.0  234.0
3  265.0  253.0
4  283.0  272.0
5    NaN  291.0
Run Code Online (Sandbox Code Playgroud)

也许不快但很容易阅读。考虑为列名和所需的实际移位设置变量。

编辑:通常可以通过df[2].shift(1)已经发布的方式进行转移,但是这会切断结转。


Dav*_*ris 5

如果你不想失去你的列转移过去的数据帧的结束,只是首先附加所需数量:

    offset = 5
    DF = DF.append([np.nan for x in range(offset)])
    DF = DF.shift(periods=offset)
    DF = DF.reset_index() #Only works if sequential index
Run Code Online (Sandbox Code Playgroud)