gpt4 book ai didi

python - 根据列中的类别删除行

转载 作者:行者123 更新时间:2023-11-28 21:19:08 25 4
gpt4 key购买 nike

我正在尝试删除以逗号分隔的文件中的行,其中 APPID 相同且类别列属于同一类别。输入:

1,APPID,ID2,ID3,5,6,7,8,9,Category,
5002 , APP-1 ,,,,,,,, Cell ,
5002 , APP-1 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Enzyme ,
5002 , APP-3 ,,,,,,,, Cell ,
5002 , APP-3 ,,,,,,,, Biochemical ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Cell ,

理想输出:

1,APPID,3,4,5,6,7,8,9,Category ,
5002 , APP-2 ,,,,,,,, Cell ,
5002 , APP-2 ,,,,,,,, Enzyme ,
5002 , APP-3 ,,,,,,,, Cell ,
5002 , APP-3 ,,,,,,,, Biochemical ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Enzyme ,
5002 , APP-4 ,,,,,,,, Cell ,

“APP-1”被删除,因为他们的第2列是一样的,他们的Category列都是“Cell”。

保留“APP-2”是因为它们在“类别”栏中有一个“细胞”,另一个是“生化”。

“APP-3”中的类似场景,其中“类别”列包含异构类别。

(更新)保留“APP-4”是因为它们的列包含异构类别。我们希望保留重复的“5002,APP-4 ......”,这将在下一个脚本中处理。这一步是快速剔除“Category”栏中同质的数万个数据点(如果它们的APPID相同),这样下一个脚本中的数组就不会爆炸。

目前的尝试似乎没有奏效(引用:removal of redundant lines based on value in last column)

  awk -F " ," '!a[$1,$2,$3,$4,$5,$6,$7,$8,$9]++' input

处理文件每个文件大约百万行,总共要处理大约 400 个文件。执行速度在这里似乎至关重要。有上师能开导吗?谢谢!

最佳答案

def killDups(infilepath, outfilepath):
data = {}
with open(infilepath) as infile:
infile.readline()
for i,line in enumerate(infile):
line = line.strip()
cols = [col.strip() for col in line.split(',')]
appid, cat = cols[1], cols[-1]
if appid not in data:
data[appid] = {cat:i}
elif cat in data[appid]:
data[appid].pop(cat)

whitelist = set()
for k,v in data.items():
whitelist.update(v.values())

with open(infilepath) as infile, open(outfilepath, 'w') as outfile:
outfile.write(infile.readline())
for i,line in enumerate(infile):
if i in whitelist:
outfile.write(line)

关于python - 根据列中的类别删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173049/

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