Сортировка сгруппированных данных в Pandas

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь отсортировать сгруппированные данные, используя Pandas My code :

  df = pd.read_csv("./data3.txt")
 grouped = df.groupby(['cust','year','month'])['price'].count()
 print(grouped)
  

Мои данные:

 cust,year,month,price
astor,2015,Jan,100
astor,2015,Jan,122
astor,2015,Feb,200
astor,2016,Feb,234
astor,2016,Feb,135
astor,2016,Mar,169
astor,2017,Mar,321
astor,2017,Apr,245
tor,2015,Jan,100
tor,2015,Feb,122
tor,2015,Feb,200
tor,2016,Mar,234
tor,2016,Apr,135
tor,2016,May,169
tor,2017,Mar,321
tor,2017,Apr,245
  

Это мой результат.

  cust  year  month
    astor  2015  Feb      1
                 Jan      2
           2016  Feb      2
                 Mar      1
           2017  Apr      1
                 Mar      1
    tor    2015  Feb      2
                 Jan      1
           2016  Apr      1
                 Mar      1
                 May      1
           2017  Apr      1
                 Mar      1
  

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

Ответ №1:

Добавить параметр sort=False в groupby :

 grouped = df.groupby(['cust','year','month'], sort=False)['price'].count()
print (grouped)
cust   year  month
astor  2015  Jan      2
             Feb      1
       2016  Feb      2
             Mar      1
       2017  Mar      1
             Apr      1
tor    2015  Jan      1
             Feb      2
       2016  Mar      1
             Apr      1
             May      1
       2017  Mar      1
             Apr      1
Name: price, dtype: int64
  

Если это невозможно, можно использовать первое решение преобразовать месяцы в даты и время последнего преобразования обратно:

 df['month'] = pd.to_datetime(df['month'], format='%b')
f = lambda x: x.strftime('%b')
grouped = df.groupby(['cust','year','month'])['price'].count().rename(f, level=2)
print (grouped)
cust   year  month
astor  2015  Jan      2
             Feb      1
       2016  Feb      2
             Mar      1
       2017  Mar      1
             Apr      1
tor    2015  Jan      1
             Feb      2
       2016  Mar      1
             Apr      1
             May      1
       2017  Mar      1
             Apr      1
Name: price, dtype: int64