質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2531閲覧

[python3 pandas] 複数のセルの内容を一つにまとめたい

Yukiya025

総合スコア86

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

2クリップ

投稿2018/10/15 22:47

編集2018/10/16 12:54

おはようございます。
同一の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"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

groupbyを使ってみてください。

python

1import pandas as pd 2a = [[1, 'abc'], 3 [2, 'def'], 4 [1, 'ghi']] 5df = pd.DataFrame(a) 6df.columns = ['id', 'string'] 7print(df) 89ans = df.groupby('id')['string'].apply(lambda x: ','.join(x)) 10print(ans)

投稿2018/10/15 23:07

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yukiya025

2018/10/16 00:47

mkgrei様、ありがとうございます! できましたー(≧∇≦)b またパソコンが使えるようになったら完成したコードを質問にアップします<3
Yukiya025

2018/10/16 12:55

完成したコードを質問本文の最後に追記したのでご覧ください<3
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問