2016-09-18 18 views
1

私はDF = pd.read_csv(「file.csvになり」)とのデータフレームにして、それを読ん を効率的

id1,id2 
a,b 
c,d 
a,e 
c,f 
c,g 

のように見えるCSVを持っています。

私はそれを隣接関係リストに変換したいと思います。つまり、出力が

a,b,e 
c,d,f,g 

が、私はそのdf.groupby(「ID1」)が役立つはずですが、可変長列は、私は少しこだわっていますので、パンダには適していない感じであるべきです。私のCSVは大きいので、私は効率的なソリューションを探しています。

これを行うにはどうすればよいですか?確かに

+0

あなたは最後に必要なのですか何 - DFまたはCSVファイル? – MaxU

答えて

1

を使用することができ、CSVファイルに書き込み:

In [107]: df.groupby('id1').id2.apply(lambda x: ','.join(x)).reset_index() 
Out[107]: 
    id1 id2 
0 a b,e 
1 c d,f,g 
+0

これはまた素晴らしい答えです。今、私はどちらを受け入れるべきか分かりません。 – eleanora

+1

@eleanoraこれを受け入れることができます。それで大丈夫です。 –

+0

@eleanora、ちょうどコインを反転! ;) – MaxU

1

あなたはできgroupby、その後、applylist

In [48]: df = pd.DataFrame({'id1': ['a', 'c', 'a', 'c', 'c'], 'id2': ['b', 'd', 'e', 'f', 'g']}) 

In [49]: df.id2.groupby(df.id1).apply(list) 
Out[49]: 
id1 
a  [b, e] 
c [d, f, g] 
Name: id2, dtype: object 

あなたはCSV文字列を必要とする場合は、

df1 = df.id2.groupby(df.id1).apply(list).apply(lambda l: ','.join(l)).reset_index() 

df1.id1.str.cat(df1.id2, sep=',').to_csv('stuff.csv', index=False) 
+0

ああ、ありがとうございました!質問のフォームにCSVとして出力したい場合は、それも簡単ですか? – eleanora

+0

@eleanora Re。 CSV出力、更新を参照してください。 –

+0

本当にありがとうございます。 – eleanora

1

使用できる:

df.groupby('id1')['id2'].apply(','.join).reset_index() 

出力がリストされる別の解決策:

df.groupby('id1')['id2'].apply(lambda x: x.tolist()) 
+0

ありがとうございます。 – eleanora

0

何かこのような:

adj = defaultdict(set) 
for line in input: 
    left, right = line.split(",") 
    adj[left].add(right) 

出力:

for k,v in adj.items(): 
    print("%s,%s" % (k, ",".join(v)))