我在制表符分隔的床文件中有一组原始基因组坐标(chrom,start,end)。我还有其他制表符分隔的床文件,其中包含一些原始基因组坐标以及与这些坐标相关的数值。这些坐标可以在床文件中多次出现,每次都有不同的数值。我需要一个最终的床文件,其中包含每个原始基因组坐标,以及找到的与该特定坐标相关的所有值的总和。我正在使用的文件示例如下。
原始文件:
chr1 2100 2300
chr2 3300 3600
chr1 2560 2800
其他床位文件:
chr1 2100 2300 6
chr2 3300 3600 56
chr1 2100 2300 10
需要的输出文件:
chr1 2100 2300 16
chr2 3300 3600 56
chr1 2560 2800 0
我需要编写一个python脚本来执行此操作,但我不确定最好的方法是什么。
答案 0 :(得分:1)
这是熊猫非常容易做到的事情之一:
import pandas
coordnames = ['Name', 'x', 'y']
f1 = pandas.read_table('file1', delimiter=r' +',
names=coordnames).dropna()
f2 = pandas.read_table('file2', delimiter=r' +',
names=coordnames + ['n']).dropna()
result = (f1.merge(f2, on=coordnames, how='left')
.groupby(coordnames).sum().fillna(0))
答案 1 :(得分:0)
def fetch_data(filename1, filename2):
lines = []
data = {}
with open (filename1) as f:
lines = f.readlines()
for line in lines:
if not line.strip():
continue
data[' '.join(line.split())] = 0
with open (filename2) as f:
lines = f.readlines()
for line in lines:
if not line.strip():
continue
arr = line.split()
data[' '.join(arr[:-1])] += int(arr[3])
return data
with open ('output.txt', 'w') as f:
for key,value in fetch_data('original.txt','data.txt').iteritems():
f.write('{0} {1} \n\n'.format(' '.join(key.split()), str(value)))