2016-12-19 2 views
1

아래에 언급되었지만 원하는 것을 반환하지 않은 파이썬 코드 조각이 있습니다. 이 예제와 같은 파일 :파이썬을 사용하여 필터링하는 중 오류가 발생했습니다.

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 

I 첫 번째 열에는 반복되는 항목이 많이 있습니다. 나는 세 번째 칼럼에 기초한 것 중 하나만 선택하고 싶다. 다음 행과 같은 :

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) 

당신은 문제가 무엇인지 알고 :

AAAS,ENST00000209873,22.3297 
AACS,ENST00000261686,2.41428 

이 코드는?

+0

'new_line' 당신이 그것을 통과 할 때 문자열의 목록입니다'나는 아직도 그것을 모두 바꿈 = ''하지만 제거 –

+0

을 writerow' 나에게 모든 반복을 주었다. – 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 
관련 문제