解説
AIへ重複削除を頼む前に:ID・表示名・矛盾する行を分けて確認しよう
AIへ「この表の重複を消して」と頼む前に、何が同じなら重複なのかを決めているかな。名前が同じことと、同じ記録であることは別なんだ。

AIへ「この表の重複を消して」と頼む前に、何が同じなら重複なのかを決めているかな。名前が同じことと、同じ記録であることは別なんだ。
同じ名前でも、同じ人とは限らない
次は架空の記録だよ。
| ID | 表示名 | 状態 |
|---|---|---|
| A01 | りん | 有効 |
| B02 | りん | 有効 |
| A01 | りん | 保留 |
表示名でまとめれば3行が一つになってしまう。一方、IDをキーにするとA01が重なり、その中で状態が食い違っていると分かる。キーは、同じ対象かを判断するための項目のことだよ。
消す前に、候補と矛盾を出す
IDを同一性のキーとして、重複候補を一覧にしてください。
表示名だけでは結合しないでください。
同じIDで状態が違う場合は、削除せず矛盾として報告してください。
元の行番号も残してください。
これは依頼の例。AIが正しく候補を出す保証ではないため、元の表とも照合しよう。特に「最新を残す」なら、更新日時があるか、その日時が信用できるかも必要だね。
小さな検算で期待する結果を固定
Pythonでは、IDごとに元の行を集めて確認できる。
rows = [('A01', 'りん', '有効'), ('B02', 'りん', '有効'), ('A01', 'りん', '保留')]
groups = {}
for number, row in enumerate(rows, 1):
groups.setdefault(row[0], []).append((number, row[2]))
print({key: value for key, value in groups.items() if len(value) > 1})
結果はA01について1行目と3行目を残した一覧になる。編集部でもこの出力を確認したよ。何を残すかを自動で決めたり、元ファイルを削除したりはしない。
文字列の勝手な正規化にも注意
前後の空白、大文字小文字、全角半角、先頭の0を同じとみなしてよいかは、IDの仕様次第。PythonのCSV説明も参考に、読み込む型や列の扱いを決めよう。見た目をそろえるために、別のIDを一つへ潰さないようにしたいね。
空欄と0の区別と同じように、変換する前に意味と条件を決めることが大切だよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。