【问题标题】:sort pandas dataframe based on list根据列表对熊猫数据框进行排序
【发布时间】:2014-12-29 16:36:20
【问题描述】:

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

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']

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

【问题讨论】:

  • 这个question 可能会有所帮助。

标签: python pandas


【解决方案1】:

pandas 0.15 版对Categoricals 的改进支持让您可以轻松做到这一点:

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')

【讨论】:

  • 这是一篇旧帖子,但正如 google 发给我的一样,值得补充的是,对于 pandas 版本 0.23.1(以及可能的更早版本),.sort 已被替换,因此您需要:@987654330 @
  • 这很有用!如果没有出现类别,是否还有办法用 NaN 填写?例如。如果初始数据框中不存在 Oands,您仍然希望该行在“North”和“South”列中显示为 NaN。如何做到这一点?
猜你喜欢
  • 2015-11-06
  • 2021-10-07
  • 2013-12-15
  • 1970-01-01
  • 2020-11-06
  • 2012-06-19
  • 2022-07-19
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多