Pandas:基于多列对数据框进行排序

Imp*_*der 6 sorting dataframe python-3.x pandas pandas-groupby

我知道这个问题已经被问过好几次了。但没有一个答案符合我的情况。

我有一个包含列、部门和员工计数的 Pandas 数据框。我需要按降序对employee_count 列进行排序。但是,如果 2 个 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
Run Code Online (Sandbox Code Playgroud)

这是我试过的。

df = df.sort_values(['Department','Employee_Count'],ascending=[True,False])
Run Code Online (Sandbox Code Playgroud)

但这只是按字母顺序对部门进行排序。

我还尝试先按部门排序,然后按 Employee_Count 排序。像这样:

df = df.sort_values(['Department'],ascending=[True])
df = df.sort_values(['Employee_Count'],ascending=[False])
Run Code Online (Sandbox Code Playgroud)

这也没有给我正确的输出:

   Department Employee_Count
4    xyz          15
2    bca          11
1    adc          10
0    abc          10
3    cde          9
Run Code Online (Sandbox Code Playgroud)

它首先给出“adc”,然后给出“abc”。请帮助我。

jez*_*ael 6

您可以交换列表中的列以及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
Run Code Online (Sandbox Code Playgroud)

或者为了测试是否使用第二个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
Run Code Online (Sandbox Code Playgroud)