2014-10-05 122 views
0

因此,我有一个熊猫DataFrame,df,列表代表分类学分类(即王国,门,类等...)我也有一个分类标签列表对应到我想要订购的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'] 

这份名单将对应于Dataframedf['Class']。我想根据列表的顺序对整个数据帧的所有行进行排序,因为当前df['Class']的顺序不同。什么是最好的方法来做到这一点?

回答

1

你可以使Class列索引列

df = df.set_index('Class') 

,然后用df.loc重新索引与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