簡體   English   中英

根據python中的其他列選擇一行

[英]selection of one row based on other columns in python

我的csv文件的一小部分類似於以下幾行:

481116  ABCF3   466 0   ENSG00000161204 0
485921  ABCF3   466 0   ENSG00000161204 0
489719  ABCF3   466 0   ENSG00000161204 0
498136  ABCF3   466 2   ENSG00000161204 0.0019723866
273359  ABHD10  326 78  ENSG00000144827 0.0301158301
491580  ABHD10  326 0   ENSG00000144827 0
493784  ABHD10  326 0   ENSG00000144827 0
494817  ABHD10  326 1   ENSG00000144827 0.0012484395

在文件中","這些列用","分隔。 在第二列中,有很多重復的ID,我只想根據第六列中的值選擇一個ID。 換句話說,對於每個ID,我想在第6列中選擇編號最大的ID。上述部分的結果必須是這樣的。

498136  ABCF3   466 2   ENSG00000161204 0.0019723866
273359  ABHD10  326 78  ENSG00000144827 0.0301158301

我試圖用python制作它,並在以下框架中編寫了一些代碼,但是沒有一個起作用:

with open('data.csv') as f, open('out.txt', 'w') as out:
    line = [line.split(',')for line in f]
    .
    .
    out.write(','.join(results))

you_data.csv:

481116,ABCF3, 466,0, ENSG00000161204,0
485921,ABCF3, 466,0, ENSG00000161204,0
489719,ABCF3, 466,0, ENSG00000161204,0
498136,ABCF3, 466,2, ENSG00000161204,0.0019723866
273359,ABHD10,326,78,ENSG00000144827,0.0301158301
491580,ABHD10,326,0, ENSG00000144827,0
493784,ABHD10,326,0, ENSG00000144827,0
494817,ABHD10,326,1, ENSG00000144827,0.0012484395  

碼:

import csv
from collections import defaultdict

with open('you_data.csv', newline='') as f, open('out.csv', 'w', newline='') as out:
    f_reader = csv.reader(f)
    out_writer = csv.writer(out)
    d = defaultdict(list)
    for line in f_reader:
        d[line[1]].append(line)
    for _,v in d.items():
        new_line = sorted(v, key=lambda i:float(i[5]), reverse=True)[0]
        out_writer.writerow(new_line)

out.csv:

498136,ABCF3, 466,2, ENSG00000161204,0.0019723866
273359,ABHD10,326,78,ENSG00000144827,0.0301158301

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM