大熊猫:基于多个列对数据框进行排序

时间:2019-11-04 08:53:39

标签: python-3.x pandas sorting dataframe pandas-groupby

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

我有一个带有列,部门和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'。 请帮助我。

1 个答案:

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