我需要帮助用python转置行。
例如,我有这种文件:
a | 1
a | 2
a | 3
b | 4
b | 5
b | 6
我想让它看起来像这样:
a | 1 | 2 | 3
b | 4 | 5 | 6
我知道如何通过这样做来转置整行:
import csv
from itertools import izip
a = izip(*csv.reader(open("fan.csv", "rb")))
csv.writer(open("fan1.csv", "wb")).writerows(a)
但是我不知道如何使用它来获得我想要的结果。
上面的脚本会给我这个结果:
a | a | a | b | b | b
1 | 2 | 3 | 4 | 5 | 6
您不想转置,而是要对键的值进行分组。 itertools.groupby
是一个方便的工具:
from itertools import groupby
r = csv.reader(open("fan.csv", "rb"))
a = [[k] + [x[1] for x in g] for k, g in groupby(r, key=lambda row: row[0])]
这将按第一列值对 csv 行进行分组,并将分组值与其各自组中的所有第二列值合并到一个新行中。