从CSV行复制值并添加到ID相同的行

时间:2014-08-13 13:29:03

标签: python mysql sql csv

我有一个链接到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中实现这一目标?

2 个答案:

答案 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)])