【发布时间】:2015-09-22 23:53:51
【问题描述】:
我正在尝试根据列对 csv 文件中的数据进行分组。我试过了:
from itertools import groupby
import csv
with open('path/trial.csv', 'rb') as f:
reader = csv.reader(f)
things = list(reader)
for key, group in groupby(things, lambda x: x[0]):
listOfThings = len(",".join([thing[1] for thing in group]).split(","))
print key + "," + str(listOfThings)
当第 1 列中的数据按特定顺序排列时,它起作用。如果它重复,计数就会变得混乱。
有
A,1
A,2
A,1
B,0
B,8
我明白了
A,3
B,2
有
A,1
A,2
B,0
B,8
A,1
我明白了
A,2
B,2
A,1
我希望我的脚本同时考虑唯一键和唯一值,并且输出为(仅取 A,1 一次,尽管它出现两次):
A,2
B,2
根据 Chad Simmon 的评论,改为:
sortedlist = list(reader)
things= sorted(sortedlist, key=operator.itemgetter(0), reverse=True)
它现在给了我
B,2
A,3
我想要 A,2。
【问题讨论】:
-
groupby仅对连续重复进行分组。如果要对整个集合进行分组,则需要使用字典或类似工具。 -
@ChadSimmons 感谢您的评论。尝试排序,其中一部分起作用了。请查看已编辑的问题。
标签: python csv group-by itertools