按对计数/数据透视表

3

我有以下CSV格式的数据:

Date    Name    Color
12/11   Thomas  Blue
12/31   Andy    Black
12/21   Luise   Red
12/41   Mark    Blue
12/11   Ronda   Black
12/11   Thomas  Blue
12/21   Mark    Green
12/11   Ronda   Black
12/31   Luise   Red
12/41   Luise   Green

我希望你能基于成对数据创建一个计数,并像下面的数据透视表一样进行排序。最好也能以CSV文件的形式呈现。
        Blue    Black   Red Green
Thomas   2          
Andy             1      
Luise                    2    1
Mark     1                    1
Ronda            1            1

我不太确定如何解决这个问题,也不能使用pandas。:(

1个回答

3
你可以使用一个defaultdictdefaultdict,里面的值是int类型,来存储颜色计数。defaultdict
import csv, collections

counts = collections.defaultdict(lambda: collections.defaultdict(int))
colors = set()
with open("data.csv") as f:
    reader = csv.reader(f, delimiter="\t")
    next(reader) # skip first line
    for date, name, color in reader:
        counts[name][color] += 1
        colors.add(color)

然后,打印不同颜色的计数(或写入CSV文件):
colors = list(colors)
print(colors)
for name in counts:
    print(name + "\t" + "\t".join(str(counts[name][color]) for color in colors))

结果(微调留给您):
['Red', 'Blue', 'Green', 'Black']
Ronda   0   0   0   2
Thomas  0   2   0   0
Andy    0   0   0   1
Luise   2   0   1   0
Mark    0   1   1   0

谢谢,运行得非常好!我得研究一下代码才能理解它(因为我是个新手),但它完成了任务! - That guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接