在pandas
中,如何在不创建数据框副本的情况下将行复制或移动到数据框的顶部?
例如,我设法使用下面的代码几乎完成了我想要的工作,但我的印象是可能有更好的方法来实现这一目标:
import pandas as pd
df = pd.DataFrame({'Probe':['Test1','Test2','Test3'], 'Sequence':['AATGCGT','TGCGTAA','ATGCATG']})
df
Probe Sequence
0 Test1 AATGCGT
1 Test2 TGCGTAA
2 Test3 ATGCATG
df_shifted = df.shift(1)
df_shifted
Probe Sequence
0 NaN NaN
1 Test1 AATGCGT
2 Test2 TGCGTAA
df_shifted.ix[0] = df.ix[2]
df_shifted
Probe Sequence
0 Test3 ATGCATG
1 Test1 AATGCGT
2 Test2 TGCGTAA
答案 0 :(得分:5)
data.table
答案 1 :(得分:2)
试试这个,你没有复制数据帧,:
df["new"] = range(1,len(df)+1)
Probe Sequence new
0 Test1 AATGCGT 1
1 Test2 TGCGTAA 2
2 Test3 ATGCATG 3
df.ix[2,'new'] = 0
df.sort_values("new").drop('new', axis=1)
Probe Sequence
2 Test3 ATGCATG
0 Test1 AATGCGT
1 Test2 TGCGTAA
基本上,由于您无法在0处插入索引,因此可以创建一个列。
如果您想索引索引,请使用:
df.sort_values("new").reset_index(drop='True').drop('new', axis=1)
Probe Sequence
0 Test3 ATGCATG
1 Test1 AATGCGT
2 Test2 TGCGTAA
答案 2 :(得分:0)
好的,我想我想出了一个解决方案。无论如何,如果您认为自己的答案更好,请随时添加自己的答案:
import numpy as np
df.ix[3] = np.nan
df
Probe Sequence
0 Test1 AATGCGT
1 Test2 TGCGTAA
2 Test3 ATGCATG
3 NaN NaN
df = df.shift(1)
Probe Sequence
0 NaN NaN
1 Test1 AATGCGT
2 Test2 TGCGTAA
3 Test3 ATGCATG
df.ix[0] = df.ix[2]
df
Probe Sequence
0 Test3 ATGCATG
1 Test1 AATGCGT
2 Test2 TGCGTAA
3 Test3 ATGCATG