2016-07-21 3 views
-3

2つの行のフィールドを2つの行を含む列に変換したいとします。ループ行ごとにこの変換2つの行のフィールドを2つの行を含む列に変換します。

これは入力される:

id refpop001 altpop001 refpop002 altpop002 refpop003 altpop003 
id1 6 274 2 93 5 95 
id2 202 0 220 0 73 0 
id3 166 159 0 173 114 90 

これは、所望の出力である:

id pop001 pop002 pop003 
id1ref 6 2 5 
id1alt 274 93 95 
id2ref 202 220 73 
id2alt 0 0 0 
id3ref 166 0 114 
id3alt 159 173 90 

ヘッダとID列は明確化のためにのみ示されており、中に必要とされません出力

+3

pleseは、[編集]あなたの質問、あなたがしようとしているものを私たちに示しています。 – martineau

+2

これはなんですか?テキストファイルですか?パンダのDataFrame?変数の束?あなたはどんな出力を望んでいますか?ファイル? ...私はこれでどこに行くのか分かりますか? – nico

答えて

0

はファイルであり、あなたのデータサイズが変更されていないプレーンテキストを区切り、直接的なアプローチがある:

lines=open('file_or_stream_name.txt','r').readlines(); 

newLines=[] 
newLines.append('\t'.join('id','pop001','pop002','pop003')) #header line 
for line in lines[1:]: 
    elements=line.split('\t') 
    newLine=[] 
    newLine.append(elements[0]+'ref') 
    newLine.extend(elements[1::2]) 
    newLines.append('\t'.join(newLine)) 

    newLine=[] 
    newLine.append(elements[0]+'alt') 
    newLine.extend(elements[2::2]) 
    newLines.append('\t'.join(newLine)) 

newText='\n'.join(newLines) #or '\r\n'.join(...), if you're in Windows 
+0

私はこのコードをlolにします。私は、実装よりもむしろそれを行う方法に関するアーキングアイデアの詳細を与えました –

+0

いくつかの間違いを修正しました。 – user3036878

0

入力をループして、それを分割することができます。おそらく、この行に沿って何かを分割することができます。

int i = 0 
for row in input: 
    row_array = row.split() 
    i = i+=1 
    ref = row_array[0] + " " + row_array[2] + " " + row_array[4]] 
    alt = row_array[1] + " " + row_array[3] + " " + row_array[5] 

    print "id" + i +"ref " + ref 
    print "id" + i + "alt" + alt 

このコードは実際には実行されませんでしたが、そこには必要に応じてこのコードがあります。あなたは、タブを変換している考える

関連する問題