おはようございます。
同一のuser_idのコメントをひとつのセルにまとめ、重複しているuser_idを消したいです。
現在、重複しているuser_id基準にソートして重複しているuser_idを消す、という部分は書けたのですが、
「同じuser_idを持つcommentをひとつのセルにまとめる」という処理が思いつきません。
以下のソート結果から
user_id comment 0 1 Hi 7 2 alice 1 2 World 6 3 find 4 3 Sato 2 3 Hello 5 4 class 3 4 Python
最終的にこのような出力結果にしたい
user_id comment 0 1 Hi 7 2 alice.World 6 3 find.Sato.Hello 5 4 class.Python
現在のコードやファイル
コード
def del_dup(): on_en = pd.read_csv('OnlyEn.csv') sorted_onen = on_en.sort_values(['user_id', 'comment'], ascending=[1, 0]) # print(sorted_onen) ソート # print(len(on_en)) no_dup_en = sorted_onen.drop_duplicates('user_id', keep='first') print(no_dup_en) del_dup()
もともとのcsvファイル
user_id,comment 1,Hi 2,World 3,Hello 4,Python 3,Sato 4,class 3,find 2,alice
現在の出力結果
user_id comment 0 1 Hi 7 2 alice 6 3 find 5 4 class
試したこと
思いついたけど「3つ以上重複したらどうするんだ」と気付き途中で取りやめたコード
dup_num = [] for i in len(sorted_onen): dup_num = i[0] if dup_num == dup_num + 1: print(i[0]) else: continue
よろしくお願いしますm(__)m
できましたー(≧∇≦)b
mkgreiさまのアドバイスのおかげです<3
header = 'user_id'
だけでuser_id,comment
の両方がヘッダーに入る理由がわかりませんが、最終的に望む挙動になったので嬉しいです(^^)
def del_dup(): on_en = pd.read_csv('OnlyEn.csv') sorted_onen = on_en.sort_values(['user_id', 'comment'], ascending=[1, 0]) # print(sorted_onen) # print(len(on_en)) df = pd.DataFrame(sorted_onen) print(df) ans = df.groupby('user_id')['comment'].apply(lambda x: ','.join(x)) print(ans) ans.to_csv('final.csv', header = 'user_id') del_dup()
# OnlyEn.csv user_id,comment 1,Hi 2,World 3,Hello 4,Python 3,Sato 4,class 3,find 2,alice
# final.csv user_id,comment 1,Hi 2,"alice,World" 3,"find,Sato,Hello" 4,"class,Python"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/16 00:47
2018/10/16 12:55