2016-08-16 11 views
1

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 

答えて

1

,:あなたはデータフレームのコピーを作成していない、これを試してみてください
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 
+0

答えてくれてありがとう、@マーリン。あなたの答えは働き、インデックスnの行にも適用できます。私は新しい列を作成したくないので、私はKartikのアプローチを好む。 – ropolo

+1

@ropolo、Kartiksメソッドまったく言っていないことは、データフレームのコピーを作成せずに – Merlin

+0

@ropolo 2を 'n'に置き換えてください。 – Merlin

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 
2

pandas.concat

pd.concat([df.iloc[[n],:], df.drop(n, axis=0)], axis=0) 
+0

私は、任意のn番目の行を移動するための答えを編集しました。 – Kartik

+0

エレガントな答え、@ Kartikありがとう。 DataFramesのリストを閉じるには括弧を追加してください。私はあなたの答えを受け入れます。私は自分で編集するつもりだったので、私は6文字の編集より短いものは投稿できません。 – ropolo

+0

ブリリアント。編集、@ Kartikありがとう。 – ropolo

関連する問題