Сортировать столбцы данных по месяцам и годам - PullRequest
0 голосов
/ 31 мая 2018

Я смотрю на ежемесячные данные, во фрейме данных.Заголовки столбцов - это все строки, преобразованные из даты и времени.Это мой последний вывод:

                             Feb 18  Jan 18  Mar 18
Flavor                                                      
Vanilla                      16.0    10.0     0.0
Chocolate                    20.0    20.0    16.0

Кажется, что столбцы отсортированы по алфавиту.Есть ли способ, которым я могу отсортировать эти столбцы типа строки по месяцу и году?Это связано с использованием префиксов?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете использовать, делать диктовку, где ключи будут исходными именами столбцов, а значения будут их datetime объектами, а затем сортировать этот диктант по значению, только чтобы упорядочить его и затем получить желаемый df.

import operator
sorted_dict = sorted(dict(zip(df.columns,pd.to_datetime(df.columns, format='%b %y'))).items(), key=operator.itemgetter(1))
df[[i[0] for i in sorted_dict]]

Вывод:

           Jan 18   Feb 18  Mar 18
Flavor          
Vanilla    10.0     16.0    0.0
Chocolate  20.0     20.0    16.0
0 голосов
/ 31 мая 2018

Вы можете преобразовать имена столбцов в datetime, а затем отсортировать их:

df.columns = pd.to_datetime(df.columns, format='%b %y')

df = df[sorted(df.columns)]

>>> df
           2018-01-01  2018-02-01  2018-03-01
Flavor                                       
Vanilla          10.0        16.0         0.0
Chocolate        20.0        20.0        16.0

Если вы хотите вернуть исходные имена столбцов строк, просто добавьте:

df.columns = df.columns.strftime('%b %y')

>>> df
           Jan 18  Feb 18  Mar 18
Flavor                           
Vanilla      10.0    16.0     0.0
Chocolate    20.0    20.0    16.0

Альтернативой являетсясделать все это в одной строке, используя sorted с ключом (за идею @SpghttCd):

df[sorted(df.columns, key = lambda x: pd.to_datetime(x, format='%b %y'))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...