使用 pandas 自定义排序 [英] Custom sorting with Pandas
本文介绍了使用 pandas 自定义排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数据框,我想先按重要性"排序,然后再按名称"排序:
I have the following dataframe that I would like to sort first by Criticality and then by Name:
Name Criticality
baz High
foo Critical
baz Low
foo Medium
bar High
bar Low
bar Medium
...
我一直试图使用这篇文章中提供的答案来做到这一点.但我无法正常工作.
I've been trying to do this using the answer provided in this post but I just can't get it to work.
最终结果应该是这样
Name Criticality
bar High
bar Medium
bar Low
baz High
baz Low
foo Critical
foo Medium
推荐答案
一种方法是使用自定义字典来创建排名"列,然后使用进行排序,然后在排序后删除该列:>
One approach would be to use a custom dict to create a 'rank' column, we then use to sort with and then drop the column after sorting:
In [17]:
custom_dict = {'Critical':0, 'High':1, 'Medium':2, 'Low':3}
df['rank'] = df['Criticality'].map(custom_dict)
df
Out[17]:
Name Criticality rank
0 baz High 1
1 foo Critical 0
2 baz Low 3
3 foo Medium 2
4 bar High 1
5 bar Low 3
6 bar Medium 2
[7 rows x 3 columns]
In [19]:
# now sort by 'Name' and 'rank', it will first sort by 'Name' column first and then 'rank'
df.sort(columns=['Name', 'rank'],inplace=True)
df
Out[19]:
Name Criticality rank
4 bar High 1
6 bar Medium 2
5 bar Low 3
0 baz High 1
2 baz Low 3
1 foo Critical 0
3 foo Medium 2
[7 rows x 3 columns]
In [21]:
# now drop the 'rank' column
df.drop(labels=['rank'],axis=1)
Out[21]:
Name Criticality
4 bar High
6 bar Medium
5 bar Low
0 baz High
2 baz Low
1 foo Critical
3 foo Medium
[7 rows x 2 columns]
这篇关于使用 pandas 自定义排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文