次の csv ファイルがあります。
name, sector, year, region, number
bob,,1999,AS,2
bob,hi-tech,,,3
mike,,2001,NE,2
plan,pharma,,,1
「名前」が行とその下の行で同じであるすべてのインスタンスを見つけるスクリプトを作成しました(csvファイルはすでに「名前」の値でソートされています)。現在のスクリプトの出力は次のとおりです。
name, sector, year, region, number
bob,tennis,1999,AS,2+3
bob,tennis,,,3
mike,,2001,NE,2
plan, baseball,,,1
これはほとんど私が欲しいものです。現在のスクリプトの優れている点は、「名前」の値が同じであるすべてのインスタンスを識別し、2 つの行のすべての属性をその名前と組み合わせて、「番号」列を更新することです。私のスクリプトの問題は、新しい行が作成されたら、マージに入る両方の行を削除する必要があることです。上記の例では、2 行目:
bob,tennis,,,3
ここにいてはいけません。以下の実際のスクリプトの関連セクションを再現しました。どなたかが提供できる説明をいただければ幸いです。
for next_row in reader:
first_name = first_row['name']
next_name = next_row['name']
if first_name == next_name:
if first_row['source'] == '2':
#get relevant attributes from next_row and add them to first_row
first_row['number'] = first_row['number'] + ' + ' + next_row['number']
elif next_row['number'] == '2':
#get relevant attributes from next_row and add them to first_row
first_row['number'] = first_row['number'] + ' + ' + next_row['number']
writer.writerow(first_row)
first_row = next_row
else:
writer.writerow(first_row)
first_row = next_row