繁体   English   中英

使用python,我需要根据CSV文件中两列中的两个键取平均值

[英]Using python, I need to average value based on two keys in two columns from a CSV file

我有3列的csv文件

TMC, EPOCH, Time
11C12, 1, 24
11C12, 1, 34
11C12, 2, 56
11C12, 2, 78
11C13, 1, 56
11C13, 2, 45
11C13, 2, 64
11C13, 3, 32
11C13, 3, 28

现在,我想拥有一个average.py文件,该文件可以计算TMC,EPOCH每种组合的平均时间,并将其写入txt或csv文件

所需的输出是:

TMC, EPOCH, Average Time
11C12, 1, average value 
11C12, 2, average value
11C13, 1, average value
11C13, 2, average value
11C13, 3, average value

使用defaultdict使用前两列作为关键字对元素进行分组,然后附加时间,然后取平均值并写入新的csv:

import csv
from collections import defaultdict

with open("in.csv") as f, open("average.csv", "w") as out:
    wr = csv.writer(out)
    d = defaultdict(list)
    head = next(f)
    out.write(head)
    for row in csv.reader(f):
        d[tuple(row[:2])].append(int(row[-1]))

    for k, v in d.items():
        out.write("{},{},{}\n".format(k[0], k[1], sum(v, 0.0) / len(v)))

输出:

TMC,EPOCH,Time
11C12,1,29.0
11C12,2,67.0
11C13,1,56.0
11C13,2,54.5
11C13,3,30.0

如果要保持顺序,首先可以看到元素,则可以使用OrderedDict

import csv
from collections import OrderedDict

with open("in.csv") as f, open("average.csv", "w") as out:
    wr = csv.writer(out)
    d = OrderedDict()
    head = next(f)
    out.write(head)
    for row in csv.reader(f):
        d.setdefault(tuple(row[:2]), []).append(int(row[-1]))

    for k, v in d.items():
        out.write("{},{},{}\n".format(k[0], k[1], sum(v, 0.0) / len(v)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM