2014-10-05 3 views
0

Итак, у меня есть pandas DataFrame, df, со столбцами, которые представляют таксономическую классификацию (например, Kingdom, Phylum, Class и т. Д.). У меня также есть список таксономических меток, которые соответствуют к заказу, который я хотел бы заказать DataFrame.Сортировка pandas DataFrame по порядку списка

список выглядит примерно так:

class_list=['Gammaproteobacteria', 'Bacteroidetes', 'Negativicutes', 'Clostridia', 'Bacilli', 'Actinobacteria', 'Betaproteobacteria', 'delta/epsilon subdivisions', 'Synergistia', 'Mollicutes', 'Nitrospira', 'Spirochaetia', 'Thermotogae', 'Aquificae', 'Fimbriimonas', 'Gemmatimonadetes', 'Dehalococcoidia', 'Oscillatoriophycideae', 'Chlamydiae', 'Nostocales', 'Thermodesulfobacteria', 'Erysipelotrichia', 'Chlorobi', 'Deinococci'] 

Этот список будет соответствовать Dataframe колонке df['Class']. Я хотел бы отсортировать все строки для всего фрейма данных в соответствии с порядком списка, так как df['Class'] находится в другом порядке. Какой был бы лучший способ сделать это?

ответ

1

Вы могли бы сделать Class столбец свой индекс столбца

df = df.set_index('Class') 

, а затем использовать df.loc, чтобы проиндексировать DataFrame с class_list:

df.loc[class_list] 

Минимальный пример:

>>> df = pd.DataFrame({'Class': ['Gammaproteobacteria', 'Bacteroidetes', 'Negativicutes'], 'Number': [3, 5, 6]}) 
>>> df 
       Class Number 
0 Gammaproteobacteria  3 
1  Bacteroidetes  5 
2  Negativicutes  6 

>>> df = df.set_index('Class') 
>>> df.loc[['Bacteroidetes', 'Negativicutes', 'Gammaproteobacteria']] 
        Number 
Bacteroidetes    5 
Negativicutes    6 
Gammaproteobacteria  3 
Смежные вопросы