以下のようなデータフレームがあります。
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
これをグラフ解析のために以下のようなデータフレームに変換したいです。
id | name1 | name2 |
---|---|---|
1 | a | b |
1 | a | c |
1 | b | c |
2 | d | e |
よろしくおねがいいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
DataFrame.groupby()
にてitertools.combinations
を適用するとこんな感じで1行で書くどともできます。
Python
1import pandas as pd 2from itertools import combinations 3df = pd.DataFrame({'id':[1,1,1,2,2],'name':['a','b','c','d','e']}) 4 5r = df.groupby('id')['name'].apply(lambda d: pd.DataFrame(combinations(d,2))).reset_index(1, drop=True).add_prefix('name') 6# name0 name1 7#id 8#1 a b 9#1 a c 10#1 b c 11#2 d e
投稿2019/09/23 23:37
総合スコア15898
0
ベストアンサー
地道にループでid
ごとにcombinations
をとればとりあえずできます。
Python
1import pandas as pd 2from itertools import combinations 3 4df = pd.DataFrame({'id':[1,1,1,2,2],'name':['a','b','c','d','e']}) 5 6dfr = pd.DataFrame(columns=['id','name1','name2']) 7for id, g in df.groupby('id'): 8 for c in combinations(g['name'], 2): 9 dfr = dfr.append( pd.Series([id, c[0], c[1]], index=dfr.columns), ignore_index=True) 10print(dfr) 11""" 12 id name1 name2 130 1 a b 141 1 a c 152 1 b c 163 2 d e 17"""
投稿2019/09/23 08:50
総合スコア38341
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
時間がかかりそうですが、確かにできそうですね。
ありがとうございます。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。