【问题标题】:Python- Columnwise average from a filePython-来自文件的按列平均
【发布时间】:2018-04-24 02:15:28
【问题描述】:

我有一个文件,其内容如下:

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

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

示例代码:

with open(r"C:\Users\priya\Desktop\test.txt") as f:
    content = f.readlines()
content = [x.split() for x in content] 
for i in range(len(content)):
    valueofa=[content[i][2]]
    valueofb=[content[i][3]]
    for j in xrange(i+1,len(content)):
        if content[i][0]==content[j][0] and content[i][1]==content[j][1]:
            valueofa.append(content[j][2])
            valueofb.append(content[j][3])

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

【问题讨论】:

    标签: python list average


    【解决方案1】:

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

    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
    

    【讨论】:

    • 非常感谢您的回复。奇迹般有效。 :)
    【解决方案2】:

    如果你可以使用 pandas,那就简单多了:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多