#python #pandas #sorting
#python #pandas #сортировка
Вопрос:
Я должен отсортировать частотное распределение строковой переменной (education), используя заранее определенные ранги, и код, который я сделал, приведен ниже. Тем не менее, он по-прежнему сортируется по алфавиту (пожалуйста, найдите прикрепленное изображение), я не знаю, что пошло не так.
education_rank = {' Bachelors':12, ' HS-grad':8, ' 11th':6, ' Masters':14, ' 9th':5, ' Some-college':11, ' Assoc-acdm':10, ' Assoc-voc':9, ' 7th-8th':4, ' Doctorate':15, ' Prof-school':13, ' 5th-6th':3, ' 10th':16, ' 1st-4th':2, ' Preschool':1, ' 12th':7}
fd_education = pd.value_counts(adult_data.education)
print(fd_education)
fd_education = fd_education.sort_index(level='education_rank')
print(fd_education)
Ответ №1:
Попробуйте этот метод —
- Сортировка в
education_rank
виде ряда для получения значений индекса - Используйте значения индекса для извлечения строк из
value_counts
ряда Dropna
если есть
#Your predefined rankings
education_rank = {'Bachelors':12, 'HS-grad':8, '11th':6, 'Masters':14, '12th':77}
#Your frequency output from value_counts()
fd_education = pd.Series({'Bachelors':500, 'HS-grad':809, '11th':23, 'Masters':65})
fd_education[pd.Series(education_rank).sort_values().index].dropna()
11th 23
HS-grad 809
Bachelors 500
Masters 65
dtype: int64
Объяснение —
Проблема в том, что вы передаете словарь на уровень вместо имени индекса объекта series. Цель уровня — помочь в ситуациях с несколькими индексами. Это позволяет ему решать, по какому из индексов производить сортировку. Вы не можете указать последовательность в виде списка / dict для сортировки.
Если он не может найти указанное вами имя индекса, он просто прибегнет к сортировке по алфавиту. Проверьте этот пример —
#Your predefined rankings
education_rank = {'Bachelors':12, 'HS-grad':8, '11th':6, 'Masters':14, '12th':77}
#Your frequency output from value_counts()
fd_education = pd.Series({'Bachelors':500, 'HS-grad':809, '11th':23, 'Masters':65})
fd_education = fd_education.sort_index(level='hello') #<----
print(fd_education)
11th 23
Bachelors 500
HS-grad 809
Masters 65
dtype: int64
Пожалуйста, ознакомьтесь с документацией для получения более подробной информации.