我的数据是csv,如下所示:
1 abc
1 def
2 ghi
3 jkl
3 mno
3 pqr
我想将其转换为与第1列中相同数字共同出现的所有对的列表。像这样:
abc; def
jkl; mno
mno; pqr
答案 0 :(得分:1)
首先,您的输入csv文件实际上不是csv。它更像是一个可以使用str.split
解析的文件。好。
现在,我将获取令牌并使用itertools.groupby
使用第一列作为关键字来对具有相同第一列的项目进行分组。
完成后,使用一个项目过滤掉列表,然后对其余项目应用组合。
写为正确的csv文件:
import csv, itertools
with open("test.csv") as f:
with open("output.csv","w",newline="") as f2:
# with open("output.csv","wb") as f2: # uncomment for python 2 (comment above!)
cw = csv.writer(f2,delimiter=";")
for l in itertools.groupby((l.split() for l in f),lambda x : x[0]):
grouped = set(x[1] for x in l[1]) # set avoids duplicate rows
if len(grouped)>1:
for c in itertools.combinations(grouped,2):
cw.writerow(c)
结果(更正,你的不正确):
abc;def
jkl;mno
jkl;pqr
mno;pqr