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)
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)
让我们从您的示例中定义数据框
>>> 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)已经发布的方式进行转移,但是这会切断结转。
如果你不想失去你的列转移过去的数据帧的结束,只是首先附加所需数量:
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)