使用Python中的用户定义序列对数据帧进行排序

时间:2014-03-24 04:56:06

标签: python sorting dataframe

我有一个数据框,我希望它用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'])

2 个答案:

答案 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()

中进行排序