我知道这个问题已经问过几次了。但是没有一个答案符合我的情况。
我有一个带有列,部门和employee_count的熊猫数据框。我需要按降序对employee_count列进行排序。但是,如果两个employee_counts之间有平局,则应根据部门按字母顺序对它们进行排序。
Department Employee_Count
0 abc 10
1 adc 10
2 bca 11
3 cde 9
4 xyz 15
required output:
Department Employee_Count
0 xyz 15
1 bca 11
2 abc 10
3 adc 10
4 cde 9
这是我尝试过的。
df = df.sort_values(['Department','Employee_Count'],ascending=[True,False])
但这只是按字母顺序对部门进行排序。
我也尝试过先按部门排序,然后再按Employee_Count排序。像这样:
df = df.sort_values(['Department'],ascending=[True])
df = df.sort_values(['Employee_Count'],ascending=[False])
这也不能给我正确的输出:
Department Employee_Count
4 xyz 15
2 bca 11
1 adc 10
0 abc 10
3 cde 9
它首先给出'adc',然后给出'abc'。 请帮助我。
答案 0 :(得分:3)
您可以交换列表中的列以及ascending
参数中的值:
说明:
列名的顺序是排序的顺序,首先按Employee_Count
降序,如果Employee_Count
中的某些重复项然后按Department
进行排序,则仅重复行升序。
df1 = df.sort_values(['Employee_Count', 'Department'], ascending=[False, True])
print (df1)
Department Employee_Count
4 xyz 15
2 bca 11
0 abc 10 <-
1 adc 10 <-
3 cde 9
或者为了测试是否使用第二个False
,然后重复的行正在排序descending
:
df2 = df.sort_values(['Employee_Count', 'Department',],ascending=[False, False])
print (df2)
Department Employee_Count
4 xyz 15
2 bca 11
1 adc 10 <-
0 abc 10 <-
3 cde 9