2016-11-26 5 views
1

панды серии сортировать по месяцам индекс

Dec 47 
 
Nov 36 
 
Oct 14 
 
Sep  2 
 
Jan  2 
 
Aug  2 
 
May  1 
 
Apr  1 
 
Jun  1 
 
Jul  1 
 
Feb  1 
 
Name: date, dtype: int64

Я Тринг для сортировки выше серии, индекс столбца месяц за месяцем. Однако вместо сортировки по календарному заказу месяца функция сортировки сортируется по словарному порядку имени месяца. Как я могу правильно отсортировать данные? Думаю, мне нужно указать, что тип индекса - месяц, а не строка. Любая помощь приветствуется. Ниже приведен фрагмент кода.

import calendar 
movies = release_dates[release_dates.title.str.contains('Christmas') & (release_dates.country=='USA')] 
movies = movies.date.dt.month.apply(lambda x: calendar.month_abbr[x]) 
counts = movies.value_counts() 
counts 

ответ

3

Вы можете использовать отсортированный CategoricalIndex с sort_index:

df.index = pd.CategoricalIndex(df.index, 
           categories=['Jan', 'Feb', 'Mar', 'Apr','May','Jun', 'Jul', 'Aug','Sep', 'Oct', 'Nov', 'Dec'], 
           sorted=True) 
df = df.sort_index() 

print (df) 
    date 
Jan  2 
Feb  1 
Apr  1 
May  1 
Jun  1 
Jul  1 
Aug  2 
Sep  2 
Oct 14 
Nov 36 
Dec 47 
+0

C: \ питон 3,5 \ Lib \ сайт-пакеты \ панда \ указатели \ category.py: 128: RuntimeWarning: ценности и категории имеют разную dtypes. Вы имели в виду использовать 'Categorical.from_codes (коды, категории)'? данные = категориальные (данные, категории = категории, упорядоченные = упорядоченные) c: \ python 3.5 \ lib \ site-packages \ pandas \ indexes \ category.py: 128: RuntimeWarning: ни одна из категорий не была найдена в значениях. Вы имели в виду использовать 'Categorical.from_codes (коды, категории)'? данные = категориальные (данные, категории = категории, упорядоченные = упорядоченные – lalatnayak

+0

Я думаю, вы можете попробовать. – jezrael

+0

Какова ваша версия панды? – jezrael

0

Хорошо это было не очень сложным. Я уверен, что Категорический бы работал только с тем, что я не смог решить проблему с помощью Categorical. Что я сделал was-

  1. Сортировать по месяцам, а месяцы были представлены в виде целых чисел
  2. К полученной серии применен картографом по индексу для преобразования целого месяца в сокращенной строку

Я уверен, что есть более эффективные способы решения этой проблемы, поэтому, если у вас есть лучший способ, отправьте то же самое.

import calendar 
 
    months = release_dates[release_dates.title.str.contains('Christmas') & (release_dates.country=='USA')].date.dt.month 
 
    counts = months.value_counts() 
 
    counts.sort_index(inplace=True) 
 
    counts.index = map(lambda x: calendar.month_abbr[x], counts.index) 
 
    counts.plot.bar()

Смежные вопросы