这是文件:https://drive.google.com/file/d/0B5v-nJeoVouHc25wTGdqaDV1WW8/view?usp=sharing
正如您所看到的,第一列中有重复项,但如果我要组合重复行,则其他列中不会覆盖任何数据。有没有办法可以在第一列中将行与重复值组合在一起?
例如,转动" 1,A,A ,,"和" 1 ,,, T,T"进入" 1,A,A,T,T"。
答案 0 :(得分:4)
普通Python:
import csv
reader = csv.Reader(open('combined.csv'))
result = {}
for row in reader:
idx = row[0]
values = row[1:]
if idx in result:
result[idx] = [result[idx][i] or v for i, v in enumerate(values)]
else:
result[idx] = values
这种魔法如何运作:
最后一步是通过or
技巧完成的:None or value
将返回value
。 value or anything
将返回value
。因此,result[idx][i] or v
将返回现有值(如果它不为空或行值。
要输出它而不丢失重复的行,我们需要保留索引,然后迭代并输出相应的result
条目:
indices = []
for row in reader:
# ...
indices.append(idx)
writer = csv.writer(open('outfile.csv', 'w'))
for idx in indices:
writer.writerow([idx] + result[idx])