我有一个链接到ID的邮政编码CSV。在不同的行中有多个不同的邮政编码归属于相同的ID。我的输入如下:
ID Postal Code
1001 MK18 1TN
1001 MK18 1TL
1002 HP17 6DG
1002 HP17 6DH
我想要做的是为每个唯一ID创建一行,并列出可用于该ID的所有相关邮政编码。
我所追求的输出与此相似:
ID Postal Codes
1001 MK18 1TN, MK18 1TL
1002 HP17 6DG, HP17 6DH
有没有人有任何建议如何在Python或SQL中实现这一目标?
答案 0 :(得分:0)
python示例可能是:
#ID Postal Code
data = [
('1001', 'MK18 1TN'),
('1001', 'MK18 1TL'),
('1002', 'HP17 6DG'),
('1002', 'HP17 6DH'),
]
d = dict()
for id,pc in data:
if id not in d:
d[id] = []
d[id].append(pc)
idkeys = d.keys()
idkeys.sort()
for k in idkeys:
print k, ', '.join(d[k])
答案 1 :(得分:0)
Python中有很多种方法,例如:使用csv模块读取输入(假设选项卡是分隔符),并使用itertools.groupby()
或collections.defaultdict(list)
对其进行分组。这是groupby()
。
import csv
from itertools import groupby
with open('postcodes.csv') as infile, open('result.csv', 'w') as outfile:
reader = csv.reader(infile, delimiter='\t')
writer = csv.writer(outfile, delimiter='\t')
writer.writerow(next(reader)) # copies the column headers into the output CSV
for _id, postcodes in groupby(reader, lambda row: row[0]):
writer.writerow([_id, ', '.join(postcode[1] for postcode in postcodes)])