如何按给定的索引顺序对Series或DataFrame进行排序?

时间:2014-11-19 08:12:48

标签: python sorting pandas dataframe

假设我有一个这样的系列:

In [19]: sr
Out[19]: 
a    1
b    2
c    3
d    4
dtype: int64

In [20]: sr.index
Out[20]: Index([u'a', u'b', u'c', u'd'], dtype='object')

我不想按字典顺序排序,而是根据自定义顺序对此系列进行排序,例如cdab。我怎么能这样做?

如果是DataFrame,该怎么办?如何按给定的索引列表对其进行排序?

2 个答案:

答案 0 :(得分:8)

您可以通过多种不同方式完成此操作。对于Series对象,您只需传递索引的首选顺序,如下所示:

>>> sr[['c','d','a','b']]
c    3
d    4
a    1
b    2
dtype: int64

或者,Series和DataFrame对象都有reindex方法。这使您在对索引进行排序时可以更灵活。例如,您可以在索引中插入新值(甚至可以选择应该具有的值):

>>> sr.reindex(['c','d','a','b','e'])
c     3
d     4
a     1
b     2
e   NaN      # <-- new index location 'e' is filled with NaN
dtype: int64

Series和DataFrame对象的另一个选项是访问索引标签的非常有用的loc方法:

>>> sr.loc[['c','d','a','b']]
c    3
d    4
a    1
b    2
dtype: int64

答案 1 :(得分:2)

只需使用reindex,例如:

In [3]: sr.reindex(['c', 'd', 'a', 'b'])
Out[3]: 
c    3
d    4
a    1
b    2
dtype: int64