我有一个数据框,我希望它用2列排序:类型和名称。两者都是字符串。但是对于类型,我希望它被命名为Cape,Supramax,Handysize,但是默认排序是按字母顺序排序,有没有办法按照我想要的顺序对它进行排序?
>>> db[['VESSELTYPE','VESSELNAME']].head(10)
VESSELTYPE VESSELNAME
0 Handysize AS
1 Supramax AK
2 Supramax AK
3 Supramax AM
4 Supramax AM
5 Supramax BS
6 Cape BA
7 Handysize CA
8 Cape CD
9 Handysize CT
这只按字母顺序排序,即Cape优先,然后是Handysize,然后是Supramax:
db.sort(['VESSELTYPE', 'VESSELNAME'])
答案 0 :(得分:0)
您可以将数据框转换为元组列表
subset = data_set[['data_date', 'data_1', 'data_2']]
tuples = [tuple(x) for x in subset.values]
具有全局哈希值,具体取决于您的订单
ENUM_VALUE = { 'Cape':1, 'Supramax':2, 'Handysize':3 }
sorted(tuples, key=lambda (k,v): ENUM_VALUE[k] )
答案 1 :(得分:0)
我想我终于找到了解决问题的方法,而不是“优雅”:
db['sorting'] = db['VESSELTYPE'].apply(lambda x: {'Cape':1,'Supramax':2,'Handysize':3}[x])
db = db.sort(['sorting','VESSELNAME'])
db = db.drop('sorting',1)
我们的想法是将char转换为整数,以便在df.sort()
中进行排序