#python #pandas #dataframe #datetime
Вопрос:
Я хочу работать с df с ежемесячными данными. Важно: данные агрегируются по месяцам. Выглядит вот так:
Month | Sum
01-2021 1
02-2021 4
03-2021 9
04-2021 11
05-2021 15
06-2021 16
08-2021 21
09-2021 25
Теперь у меня есть две задачи:
- Определите, отсутствует ли месяц, и вставьте месяц. В этом примере отсутствует июль 2021 года (07-2021). В этом случае я хочу создать новую строку с месяцем и использовать предыдущую сумму (так как этот месяц ничего не вносит). Но df должен быть завершен без пропущенных месяцев.
- Быстрое переключение между ежемесячным и ежеквартальным отображением. Преобразование в:
Month | Sum
Q1-2021 9
Q2-2021 16
Q3-2021 25
Что я уже сделал:
Преобразовал столбец месяца в тип даты и времени, так как я думаю, что это может быть первым шагом к наилучшему решению здесь.
Большое спасибо!
Комментарии:
1. Указатель 1. Вы можете создать
DataFrame
на 12 месяцев. Затем слева объедините свои ежемесячные данные в фрейм данных. Указатель 2: Вы можете использоватьpd.Grouper
Ответ №1:
Я бы работал с этой resample
функцией. Если Month
это столбец фрейма данных, вы должны преобразовать его в индекс ( df.set_index('Month')
), а затем выполнить повторную выборку либо ежемесячно, либо ежеквартально:
ts.resample('M').bfill()
или
ts.resample('Q').bfill()
или один за другим. bfill
заполняет недостающие значения на основе предыдущей доступной записи(записей).