2016-12-19 36 views
1

以下に記載されているが、私が望むものを返さなかったPythonコードがあります。この例のようなファイルです:Pythonを使用したフィルタリングでエラーが発生しました

AAAS,ENST00000552161,1.70232E-30 
AAAS,ENST00000548258,1.09222E-84 
AAAS,ENST00000549450,1.3171E-108 
AAAS,ENST00000209873,22.3297 
AAAS,ENST00000546562,0.170807 
AAAS,ENST00000394384,5.53609 
AAAS,ENST00000547238,0.829774 
AACS,ENST00000316543,0.49901 
AACS,ENST00000261686,2.41428 

私は第1列に多くの繰り返し項目があります。私は第3列に基づいてそれらのうちの1つだけを選びたいと思う。次の行のように:

AAAS,ENST00000209873,22.3297 
AACS,ENST00000261686,2.41428 

これはコードです:

import csv 
from collections import defaultdict 

with open('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[2]), reverse=True)[0] 
     out_writer.writerow(new_line) 

あなたは問題が何であるかを知っているのですか?

+0

私はあなたがwriterow' –

+0

'に渡したときに、' new_line'は、文字列のリストである私は改行=」の両方を削除 "が、まだそれはないと思います私にすべてのリピートを与えました – ARM

+0

いいえ、私は最終ループ 'new_line'であなたの変数を意味しました –

答えて

2

これはパンダのための完璧な問題である:

import pandas as pd 
df = pd.read_csv('data.csv',header=None) 
df.groupby(0).max() 
#     1   2 
#0        
#AAAS ENST00000552161 22.32970 
#AACS ENST00000316543 2.41428 
関連する問題