Как вывести название месяца в правильном порядке, используя strftime? - PullRequest
1 голос
/ 15 февраля 2020

Вот быстрый взгляд на мой фрейм данных:

   local_date  amount
0  2017-08-16   10.00
1  2017-10-26   21.70
2  2017-11-04    5.00
3  2017-11-12   37.20
4  2017-11-13   10.00
5  2017-11-18   31.00
6  2017-11-27   14.00
7  2017-11-29   10.00
8  2017-11-30   37.20
9  2017-12-16    8.00
10 2017-12-17   43.20
11 2017-12-17   49.60
12 2017-12-19  102.50
13 2017-12-19   28.80
14 2017-12-22   72.55
15 2017-12-23   24.80
16 2017-12-24   62.00
17 2017-12-26   12.40
18 2017-12-26   15.50
19 2017-12-26   40.00
20 2017-12-28   57.60
21 2017-12-31   37.20
22 2018-01-01   18.60
23 2018-01-02   12.40
24 2018-01-04   32.40
25 2018-01-05   17.00
26 2018-01-06   28.80
27 2018-01-11   20.80
28 2018-01-12   10.00
29 2018-01-12   26.00

Я пытаюсь построить ежемесячную сумму транзакций, что хорошо, за исключением некрасивых x-тиков: enter image description here

Я хотел бы изменить его на Название месяца и года (например, январь 2019 г.). Поэтому я сортирую даты, меняю их, используя strftime, и вычерчиваю их снова, но порядок дат полностью запутан.

Код, который я использовал для сортировки дат и их преобразования:

transactions = transactions.sort_values(by='local_date')

transactions['month_year'] = transactions['local_date'].dt.strftime('%B %Y')

#And then groupby that column:

transactions.groupby('month_year').amount.sum().plot(kind='bar')

При этом Month_year соединяются вместе. Январь 2019 года наступает после января 2018 года и т. Д. c. et c.

Я думал, что сортировка по дате исправит это, но это не так. Какой лучший способ подойти к этому? enter image description here

1 Ответ

3 голосов
/ 15 февраля 2020

Вы можете преобразовать столбец в месячные периоды на Series.dt.to_period, а затем изменить PeriodIndex на пользовательский формат в rename:

transactions = transactions.sort_values(by='local_date')
(transactions.groupby(transactions['local_date'].dt.to_period('m'))
             .amount.sum()
             .rename(lambda x: x.strftime('%B %Y'))
             .plot(kind='bar'))

Альтернативное решение:

transactions = transactions.sort_values(by='local_date')
s = transactions.groupby(transactions['local_date'].dt.to_period('m')).amount.sum()
s.index = s.index.strftime('%B %Y')
s.plot(kind='bar')

g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...