gpt4 book ai didi

python - 根据 python 中的特定列对行进行分组和平均 - 改写

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:46 25 4
gpt4 key购买 nike

我有一个很大的制表符分隔文件,如下所示:

chr1    9507728 9517729 0   chr1    9507728 9517729 5S_rRNA
chr1 9537731 9544392 0 chr1 9537731 9547732 5S_rRNA
chr1 9497727 9507728 0 chr1 9497727 9507728 5S_rRNA
chr1 9517729 9527730 0 chr1 9517729 9527730 5S_rRNA
chr8 1118560 1118591 1 chr8 1112435 1122474 AK128400
chr8 1118591 1121351 0 chr8 1112435 1122474 AK128400
chr8 1121351 1121382 1 chr8 1112435 1122474 AK128400
chr8 1132513 1142552 0 chr8 1132513 1142552 AK128400
chr19 53436277 53446295 0 chr19 53436277 53446295 AK128361
chr19 53456313 53465410 0 chr19 53456313 53466331 AK128361
chr19 53465410 53465441 1 chr19 53456313 53466331 AK128361
chr19 53466331 53476349 0 chr19 53466331 53476349 AK128361

根据最后一列,有 3 组,每组有 4 行。根据第四列的值,我想获得每组第一行、每组第二行、每组第三行和每组第四行的平均值。因此,在预期输出中,我将有 4 行(因为每组有 4 行)和 2 列。第一列是 ID,在本例中为 1、2、3 和 4。第二列是我提到的应如何计算的平均值。

预期输出:

1   0.33
2 0
3 0.66
4 0

我正在尝试使用以下命令在 python 2.7 中执行此操作:

file = open('myfile.txt', 'r')
average = []
for i in file:
ave = i[3]/3
average.append(ave)

这仅返回一个错误的数字。你知道如何修复它以获得预期的输出吗?

最佳答案

这是一种方法:

with open("myfile.txt") as inFile:
lines = [" ".join(line.split()) for line in inFile]
s=0
for i in range(4):
for j in range(0,9,4):
s += int(lines[i + j].split()[3])
avg = s / 3
print("%d %.2f" % (i+1, avg))
s=0

输出:

1   0.33
2 0.00
3 0.67
4 0.00

或者您可以使用列表理解:

with open("myfile.txt") as inFile:
lines = [" ".join(line.split()) for line in inFile]
s = [sum([int(lines[i + j].split()[3]) for j in range(0,9,4)]) for i in range(4)]
avg = [elem / 3 for elem in s]
for i, value in enumerate(avg):
print("%d %.2f" % (i+1, value))

请记住,上述代码片段是按照您在问题中提供的确切数据格式进行测试的。

关于python - 根据 python 中的特定列对行进行分组和平均 - 改写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com