2016-09-15 2 views
2

Я пытаюсь отфильтровать DataFrame на основе одного или нескольких значений. Ниже приведен пример CSV:Фильтрация фрейма данных с несколькими индексами на основе значений столбцов, удаляющих все строки внутри уровня

AlignmentId,TranscriptId,classifier,value 
ENSMUST00000025010-1,ENSMUST00000025010,AlnCoverage,0.99612 
ENSMUST00000025010-1,ENSMUST00000025010,AlnIdentity,0.93553 
ENSMUST00000025010-1,ENSMUST00000025010,Badness,0.06749 
ENSMUST00000025014-1,ENSMUST00000025014,AlnCoverage,1.0 
ENSMUST00000025014-1,ENSMUST00000025014,AlnIdentity,0.96382 
ENSMUST00000025014-1,ENSMUST00000025014,Badness,0.03618 

И когда загружен:

>>> df = pd.read_csv('tmp.csv', index_col=['AlignmentId', 'TranscriptId']) 
>>> df 
              classifier value 
AlignmentId   TranscriptId 
ENSMUST00000025010-1 ENSMUST00000025010 AlnCoverage 0.99612 
        ENSMUST00000025010 AlnIdentity 0.93553 
        ENSMUST00000025010  Badness 0.06749 
ENSMUST00000025014-1 ENSMUST00000025014 AlnCoverage 1.00000 
        ENSMUST00000025014 AlnIdentity 0.96382 
        ENSMUST00000025014  Badness 0.03618 

Я хочу бросить все AlignmentId группу, провалить серию classifiers. В этом примере скажем, что я хочу сбросить ENSMUST00000025010, потому что AlnCoverage < 1.0. Таким образом, я хочу, чтобы в конечном итоге с этим dataframe:

ENSMUST00000025014-1 ENSMUST00000025014 AlnCoverage 1.00000 
        ENSMUST00000025014 AlnIdentity 0.96382 
        ENSMUST00000025014  Badness 0.03618 

Как это сделать?

ответ

2

попробовать это:

In [169]: df = df.drop(df[(df.classifier=='AlnCoverage') & (df.value < 1)].index) 

In [170]: df 
Out[170]: 
              classifier value 
AlignmentId   TranscriptId 
ENSMUST00000025014-1 ENSMUST00000025014 AlnCoverage 1.00000 
        ENSMUST00000025014 AlnIdentity 0.96382 
        ENSMUST00000025014  Badness 0.03618 
Смежные вопросы