我有一個csv,看起來像如何從邊緣列表中創建一個鄰接表有效
id1,id2
a,b
c,d
a,e
c,f
c,g
我在與DF = pd.read_csv(「FILE.CSV」)一個數據幀讀它。
我想將其轉換爲鄰接列表。也就是說,輸出應爲
a,b,e
c,d,f,g
我覺得df.groupby(「ID1」)應該幫助,但可變長度行不適合大熊貓所以我有點卡住了。由於我的csv很大,我正在尋找一個有效的解決方案。
這樣做的好方法是什麼?
我有一個csv,看起來像如何從邊緣列表中創建一個鄰接表有效
id1,id2
a,b
c,d
a,e
c,f
c,g
我在與DF = pd.read_csv(「FILE.CSV」)一個數據幀讀它。
我想將其轉換爲鄰接列表。也就是說,輸出應爲
a,b,e
c,d,f,g
我覺得df.groupby(「ID1」)應該幫助,但可變長度行不適合大熊貓所以我有點卡住了。由於我的csv很大,我正在尋找一個有效的解決方案。
這樣做的好方法是什麼?
你的確可以groupby
,然後apply
list
:
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)
df.groupby('id1')['id2'].apply(','.join).reset_index()
另一種解決方案,其中輸出列表:
df.groupby('id1')['id2'].apply(lambda x: x.tolist())
非常感謝。 – eleanora
事情是這樣的:
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)))
你需要什麼在最後 - 一個DF或CSV文件? – MaxU