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”。请帮助我。
您可以交换列表中的列以及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)
| 归档时间: |
|
| 查看次数: |
9248 次 |
| 最近记录: |