前提・実現したいこと
はじめまして、質問文に不足があるかもしれませんがご容赦ください。
仮に下のようなcsvファイルがあるとき
番号 | 名前 | 年齢 | 国籍 | 性別 | 書類 |
---|---|---|---|---|---|
001 | 新井 | 20 | 日本 | 女性 | A |
001 | 新井 | 20 | 日本 | 女性 | B |
002 | ジム | 25 | 米国 | 男性 | A |
003 | ジム | 25 | 米国 | 男性 | B |
004 | 王 | 19 | 中国 | 女性 | A |
004 | エレナ | 19 | 豪州 | 女性 | A |
005 | エレナ | 19 | 豪州 | 女性 | B |
006 | 新井 | 25 | 日本 | 男性 | A |
007 | 新井 | 25 | 日本 | 男性 | B |
[名前][年齢][国籍][性別]が同じペアを抽出し、その後[書類]A,Bで[番号]が同じものを取り除きたい、つまり下の表のようにしたいのです。
番号 | 名前 | 年齢 | 国籍 | 性別 | 書類 |
---|---|---|---|---|---|
002 | ジム | 25 | 米国 | 男性 | A |
003 | ジム | 25 | 米国 | 男性 | B |
004 | エレナ | 19 | 豪州 | 女性 | A |
005 | エレナ | 19 | 豪州 | 女性 | B |
006 | 新井 | 25 | 日本 | 男性 | A |
007 | 新井 | 25 | 日本 | 男性 | B |
※[補足] 本当に最終的にやりたいことは、[書類Aフォルダ]に入っているファイル名(番号と連動)を、書類Bの番号でリネームすることです。
この場合で言えば、ジムの情報が記録された[002.doc]を[003.doc]に自動でリネームすることをファイル全体に行うこと最終目標です。……可能ですよね?
試したこと
ひとまずpython(3.7.4 Anaconda 3)で下のように入力しました。
Python
1# pandasをインポート 2import pandas as pd 3# CSVファイルを読み込む 4df = pd.read_csv('C:/Users/username/Desktop/PythonProject/A and B.csv', encoding='shift_jis') 5# 重複行を出力 6Data1 = (df[df.duplicated(subset=['名前', '年齢', '国籍', '性別'], keep=False)]) 7print(Data1)
これでひとまず
番号 | 名前 | 年齢 | 国籍 | 性別 | 書類 |
---|---|---|---|---|---|
001 | 新井 | 20 | 日本 | 女性 | A |
001 | 新井 | 20 | 日本 | 女性 | B |
002 | ジム | 25 | 米国 | 男性 | A |
003 | ジム | 25 | 米国 | 男性 | B |
004 | エレナ | 19 | 豪州 | 女性 | A |
005 | エレナ | 19 | 豪州 | 女性 | B |
006 | 新井 | 25 | 日本 | 男性 | A |
007 | 新井 | 25 | 日本 | 男性 | B |
にできました。しかし、ここから番号の重複、上の表で言えば新井(女性)を除くことが出来ません。
python
1Data4 = (df[df.duplicated(subset=['名前', '年齢', '国籍', '性別'], keep=False)]) ~ (df[df.drop_duplicates(subset=['番号'])]) 2print(Data4)
ではSyntaxErrorを起こしてしまいます。簡単な問題なのかもしれませんが、ご教授ください。宜しくおねがいします。
なお、先に番号の被りを取り除くのは不可でおねがいします。上の表に例示はしませんでしたが、例えば
番号 | 名前 |
---|---|
002 | ジム |
003 | ジム |
003 | エレナ |
004 | エレナ |
のような場合、先に番号の被りを取り除いてしまうとジムとエレナが消えてしまいます。個人特定が先でないと(多分)だめなんです。
回答2件
あなたの回答
tips
プレビュー