根据python中的优先级列表对数据框列值进行排序

时间:2020-03-23 21:01:48

标签: python pandas dataframe

我有一个包含两列的数据框,如下所示:

Col 1       Col2
  A         RED
  B         GREEN
  C         AMBER
  D          RED
  E          GREEN

我希望输出数据框为:

Col1        Col2
 A           RED
 D           RED
 C           AMBER
 B            GREEN
 E            GREEN

我希望按红色,琥珀色和绿色的优先顺序对列进行排序 不管第1列的值如何。

非常感谢您提前提供帮助

2 个答案:

答案 0 :(得分:3)

另一种解决方案:

  #create a mapping of the sort order
  sortbox = {'RED':1,'AMBER':2,'GREEN':3}

  #create new column with the sort order
  df['sort_column'] = df.Col2.map(sortbox)

  #sort with sort_column

 df.sort_values('sort_column').drop('sort_column',axis=1).reset_index(drop=True)


   Col 1    Col2
0   A       RED
1   D       RED
2   C       AMBER
3   B       GREEN
4   E       GREEN

答案 1 :(得分:1)

执行此操作的一种方法是添加另一列,该列包含col2中每行的第二个字母并对其进行排序(这是我发现唯一适合您的问题的排序顺序):

d1 = {'col1': ['A', 'B', 'C', 'D', 'E'], 'col2': ['RED', 'GREEN', 'AMBER', 'RED', 'GREEN']}
df1 = pd.DataFrame(data=d1)
df1['col3'] = [i[1] for i in df1['col2']]
df1 = df1.sort_values(by='col3')

排除第三列之后的结果类似于您发布的结果