基于列表对pandas数据帧进行排序

use*_*827 12 python pandas

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

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
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,以便根据列表重新排序LSE列:

lst = ['Oands','Wetnds','Develd','Cn','Soys','Otherg','Wht']
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ius 14

Categorical熊猫版本0.15中的s 的改进支持允许您轻松地执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

如果这只是一个临时排序,那么保持LSE列Categorical可能不是你想要的,但是如果这个排序是你希望能够在不同的上下文中使用几次,那么这Categoricals是一个很好的解决方案.


在以后的版本中pandas,sort已被替换sort_values,所以你需要改为:

df.sort_values('LSE_cat')
Run Code Online (Sandbox Code Playgroud)

  • 这是一个老帖子,但谷歌发送给我这里,值得补充的是,对于pandas版本0.23.1(可能是早期版本),`.sort`已被替换,所以你需要:`df.sort_values('LSE_cat',就地=真)` (2认同)