将所需的行移动到pandas数据框的顶部

时间:2016-08-16 16:55:26

标签: python pandas

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

3 个答案:

答案 0 :(得分:5)

pandas.concat

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