我有一个包含两列的数据框,如下所示:
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列的值如何。
非常感谢您提前提供帮助
答案 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')
排除第三列之后的结果类似于您发布的结果