假设我有一个这样的系列:
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,该怎么办?如何按给定的索引列表对其进行排序?
答案 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