Python での重複の削除について質問があります。たくさんの投稿を読みましたが、まだ解決できていません。次の csv ファイルがあります。
編集
入力:
ID, Source, 1.A, 1.B, 1.C, 1.D
1, ESPN, 5,7,,,M
1, NY Times,,10,12,W
1, ESPN, 10,,Q,,M
出力は次のようになります。
ID, Source, 1.A, 1.B, 1.C, 1.D, duplicate_flag
1, ESPN, 5,7,,,M, duplicate
1, NY Times,,10,12,W, duplicate
1, ESPN, 10,,Q,,M, duplicate
1, NY Times, 5 (or 10 doesn't matter which one),7, 10, 12, W, not_duplicate
つまり、ID が同じ場合、ソース「NY Times」の行から値を取得し、「NY Times」の行に空白の値があり、「ESPN」ソースの重複行にそのセルの値がある場合、「ESPN」ソースの行から値を取得します。出力するには、元の 2 行に重複としてフラグを立て、3 行目を作成します。
もう少し明確にするために、このスクリプトをさまざまな列ヘッダーを持つさまざまな csv ファイルで実行する必要があるため、次のようなことはできません。
def main():
with open(input_csv, "rb") as infile:
input_fields = ("ID", "Source", "1.A", "1.B", "1.C", "1.D")
reader = csv.DictReader(infile, fieldnames = input_fields)
with open(output_csv, "wb") as outfile:
output_fields = ("ID", "Source", "1.A", "1.B", "1.C", "1.D", "d_flag")
writer = csv.DictWriter(outfile, fieldnames = output_fields)
writer.writerow(dict((h,h) for h in output_fields))
next(reader)
first_row = next(reader)
for next_row in reader:
#stuff
テーブル内の他の列とは関係なく、プログラムを最初の 2 つの列で実行したいからです。つまり、「ID」と「ソース」はすべての入力ファイルに含まれますが、残りの列はファイルによって異なります。
あなたが提供できるどんな助けでも大歓迎です!参考までに、「ソース」は NY タイムズ、ESPN、またはウォール ストリート ジャーナルのみであり、重複の優先順位は次のとおりです: 利用可能な場合は NY タイムズ、そうでない場合は ESPN、それ以外の場合はウォール ストリート ジャーナル。これは、すべての入力ファイルに当てはまります。