Панды: сортировка кадра данных по нескольким столбцам - PullRequest
2 голосов
/ 04 ноября 2019

Я знаю, что этот вопрос задавался несколько раз. Но ни один из ответов не соответствует моему случаю.

У меня есть pandas dataframe со столбцами, Department и employee_count. Мне нужно отсортировать столбец 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

Это то, что я пробовал.

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 Ответ

3 голосов
/ 04 ноября 2019

Вы можете поменять столбцы в списке, а также значения в параметре 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...