Python-文件中的列式平均值

时间:2018-04-24 02:15:28

标签: python list average

我的文件内容如下:

field :students, types[StudentType] do
  argument :grade, types.Int
  resolve ->(obj, args, ctx) {
    Student.where(grade: args[:grade])
  }
end

我的目标是获得如下最终输出:

A B 2 4
C D 1 2
A D 3 4
A D 1 2
A B 4 7 and so on..

也就是说,对于前两列的每个唯一组合,结果应该是文件的其他两列的列平均值。我尝试使用循环,这只会增加程序的复杂性。有没有其他方法可以实现目标。

示例代码:

A B 3 5.5
C D 1 2
A D 2 3

我打算按索引取两个列表的平均值。

2 个答案:

答案 0 :(得分:3)

您可以将每个字母组合作为元组存储在字典中,然后在结尾处进行平均,例如:

d = {}
with open(r"C:\Users\priya\Desktop\test.txt") as f:
    for line in f:
        a, b, x, y = line.split()
        d.setdefault((a, b), []).append((int(x), int(y)))

for (a, b), v in d.items():
    xs, ys = zip(*v)
    print("{} {} {:g} {:g}".format(a, b, sum(xs)/len(v), sum(ys)/len(v)))

输出:

A B 3 5.5
C D 1 2
A D 2 3

答案 1 :(得分:0)

如果你可以使用熊猫,它会更简单:

import pandas as pd

df = pd.read_csv(r"C:\Users\priya\Desktop\test.txt", names=['A','B','C','D'])
df
    A   B   C   D
0   A   B   2   4
1   C   D   1   2
2   A   D   3   4
3   A   D   1   2
4   A   B   4   7

df.groupby(['A','B']).mean().reset_index()

    A   B    C   D
0   A   B   3.0 5.5
1   A   D   2.0 3.0
2   C   D   1.0 2.0