基于列表对Pandas数据框进行排序

30

我想对以下数据框进行排序:

Region           LSE          North      South
0                   Cn     33.330367   9.178917
1               Develd     -36.157025 -27.669988
2               Wetnds    -38.480206 -46.089908
3                Oands    -47.986764 -32.324991
4               Otherg    323.209834  28.486310
5                 Soys      34.936147   4.072872
6                  Wht     0.983977 -14.972555

我希望按照列表重新排序,使LSE列重新排列:

lst = ['Oands','Wetnds','Develd','Cn','Soys','Otherg','Wht']

当然,其他列也需要相应地重新排序。有没有办法在pandas中做到这一点?


这个 问题 可能有所帮助。 - YS-L
1个回答

35

在 pandas 的 0.15 版本中,对 Categorical 的支持得到了改进,这使得您可以轻松地执行以下操作:

df['LSE_cat'] = pd.Categorical(
    df['LSE'], 
    categories=['Oands','Wetnds','Develd','Cn','Soys','Otherg','Wht'], 
    ordered=True
)
df.sort('LSE_cat')
Out[5]: 
   Region     LSE       North      South LSE_cat
3       3   Oands  -47.986764 -32.324991   Oands
2       2  Wetnds  -38.480206 -46.089908  Wetnds
1       1  Develd  -36.157025 -27.669988  Develd
0       0      Cn   33.330367   9.178917      Cn
5       5    Soys   34.936147   4.072872    Soys
4       4  Otherg  323.209834  28.486310  Otherg
6       6     Wht    0.983977 -14.972555     Wht
如果这只是一个临时排序,那么将 LSE 列保持为 Categorical 可能并不是您想要的,但如果这种排序是您希望在不同上下文中能够多次使用的话,Categoricals 是一个很好的解决方案。
在较新版本的 pandas 中,sort 已被替换为 sort_values,所以您需要使用以下语句:
df.sort_values('LSE_cat')

11
这是一篇旧帖子,但由于谷歌把我带到这里,有必要补充一下:对于pandas版本0.23.1(以及可能的早期版本),.sort已经被替换了,所以你需要使用:df.sort_values('LSE_cat', inplace=True) - doctorer
这很有用! 如果一个类别不存在,是否也有一种方法可以用NaN填充?例如,如果Oands在初始数据框中不存在,您仍希望该行出现,并在“North”和“South”列中显示NaN。 如何做到这一点? - Newbielp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接