gpt4 book ai didi

python - 基于两列中的值合并其他列中的值

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:51 25 4
gpt4 key购买 nike

我有一个包含四列的制表符分隔文件。我需要为“col1”和“col2”中的每个唯一值对组合“col3”和“col4”。示例和输出如下所示。

我想到的一种方法是使用嵌套循环:外循环按顺序读取行,内循环从头开始读取所有行并查找映射。然而,这个过程似乎是计算密集型的。

有没有其他方法可以做到这一点。

col1    col2    col3    col4
a c 1,2 physical
a c 2,3 genetic
b c 22 physical
b d 33,44 genetic
c e 1,2 genetic
c e 2 physical
c f 33,44 physical
c f 3 genetic
a a 4 genetic
e c 1,2 xxxxx


col1 col2 col3 col4
a c 1,2,3 genetic,physical
a a 4 genetic
b c 22 physical
b d 33,44 genetic
c e 1,2 genetic,physical,xxxxx
c f 3,33,44 genetic,physical

如果 'col1' 和 'col2' 像上面最后一行中的值 'xxxxx' 那样切换,它会结合这些值

最佳答案

我会创建一个键字典,这些键是包含 column1 和 column2 数据的元组。这些值将是一个包含 column3 和 column4 数据的列表...

from collections import defaultdict
with open('test.dat') as f:
data = defaultdict( lambda:([],[]))
header = f.readline()
for line in f:
col1,col2,col3,col4 = line.split()
col3_data,col4_data = data[(col1,col2)] #data[frozenset((col1,col2))] if order doesn't matter
col3_data.append(col3)
col4_data.append(col4)

现在排序并写入输出(使用 ',' 连接 column3 和 column4 列表,使用 setsorted 使其唯一正确地)

with open('outfile.dat','w') as f:
f.write(header)
#If you used a frozenset in the first part, you might want to do something like:
#for k in sorted(map(sorted,data.keys())):
for k in sorted(data.keys()):
col1,col2 = k
col3_data,col4_data = data[k]
col3_data = ','.join(col3_data) #join the list
col3_data = set(int(x) for x in col3_data.split(',')) #make unique integers
col3_str = ','.join(map(str,sorted(col3_data))) #sort, convert to strings and join with ','
col4_data = ','.join(col4_data) #join the list
col4_data = sorted(set(col4_data.split(','))) #make unique and sort
f.write('{0}\t{1}\t{2}\t{3}\n'.format(col1,col2,col3_str,','.join(col4_data)))

关于python - 基于两列中的值合并其他列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13032834/

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