2017-01-28 10 views
-1

これはファイルです:https://drive.google.com/file/d/0B5v-nJeoVouHc25wTGdqaDV1WW8/view?usp=sharing最初のセルで同じ値を持つCSV行をマージするにはどうすればよいですか?

あなたが見ることができるように、最初の列に重複があるが、私は重複行を結合した場合、データは他の列で上書きしないになるだろう。最初の列に重複した値を持つ行を組み合わせる方法はありますか?

たとえば、「1、A、A ,,」と「1 ,,, T、T」を「1、A、A、T、T」に変換します。

+0

は 'OK pandas'たり、プレーンなPythonで解決策を探している使用しています? – Marat

答えて

3

平野のPython:

この魔法のしくみ
import csv 

reader = csv.Reader(open('combined.csv')) 
result = {} 

for row in reader: 
    idx = row[0] 
    values = row[1:] 
    if idx in result: 
     result[idx] = [result[idx][i] or v for i, v in enumerate(values)] 
    else: 
     result[idx] = values 

:CSVの行を超える

  • 反復は、すべてのレコードに対して
  • ファイルと同じインデックスを持つレコードがあった場合、我々は確認してください前に
  • このインデックスが初めて表示される場合は、行の値をコピーしてください。
  • 重複している場合は、行の値を空のセルに割り当てます。

最後のステップは、orトリックを介して行われます:None or valuevalueを返します。 value or anythingvalueを返します。したがって、result[idx][i] or vは、空でない場合は既存の値を返し、行の値は返されません。その後、出力するには

この重複行を失うことなく、私たちはインデックスを維持する必要があり、反復処理し、resultエントリに対応する出力:

indices = [] 
for row in reader: 
    # ... 
    indices.append(idx) 

writer = csv.writer(open('outfile.csv', 'w')) 
for idx in indices: 
    writer.writerow([idx] + result[idx]) 
+0

ありがとう、それは優雅な解決策です。重複していない行を失うことなくCSVファイルに出力する方法を知っていますか? – aaa

+0

@MaxPeart、答えに追加 – Marat

関連する問題