我有以下 3 列格式的一组数据(CSV 文件):
A, B, C
3277,4733,54.1
3278,4741,51.0
3278,4750,28.4
3278,4768,36.0
3278,4776,50.1
3278,4784,51.4
3279,4792,82.6
3279,4806,78.2
3279,4814,36.4
而且我需要得到一个三向列联表,例如:(对不起,这看起来不太好)
A /B 4733 4741 4750 4768 4776 4784 4792 4806 4814
3277 C 54.1
3278 51 28.4 36 50.1 51.4
3279 82.6 78.2 36.4
类似于 excel“数据透视表”、OpenOffice 数据试验或 R“table(x,y,z)”
问题是我的数据集是巨大的(超过 500,000 总行,在 A 和 B 中有大约 400 个不同的因素。(OOo、MSO 和 R 限制阻止实现这一点)
我确信可以使用 Python 脚本来创建这样的表。A 和 B 都是数字(但可以视为字符串)。
有人处理过这个吗?(也欢迎使用 C 或 Java 编写的伪代码或代码……但我更喜欢 python,因为它实现起来更快:)
编辑: 几乎拥有它,感谢 John Machin。以下 Python 脚本几乎提供了我正在寻找的内容,但是,在编写输出文件时,我可以看到我正在编写的“标题”中的值(取自第一行)与其他行不对应。
from collections import defaultdict as dd
d = dd(lambda: dd(float))
input = open("input.txt")
output = open("output.txt","w")
while 1:
line = input.readline()
if not line:
break
line = line.strip('\n').strip('\r')
splitLine = line.split(',')
if (len(splitLine) <3):
break
d[splitLine[0]][splitLine[1]] = splitLine[2]
output.write("\t")
for k,v in d.items()[0][1].items():
output.write(str(k)+"\t")
output.write("\n")
for k,v in d.items():
output.write(k+"\t")
for k2,v2 in v.items():
output.write(str(v2)+"\t")
output.write("\n")