Панды: Работа с недостающими значениями в ежемесячных данных

#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
 

Теперь у меня есть две задачи:

  1. Определите, отсутствует ли месяц, и вставьте месяц. В этом примере отсутствует июль 2021 года (07-2021). В этом случае я хочу создать новую строку с месяцем и использовать предыдущую сумму (так как этот месяц ничего не вносит). Но df должен быть завершен без пропущенных месяцев.
  2. Быстрое переключение между ежемесячным и ежеквартальным отображением. Преобразование в:
 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 заполняет недостающие значения на основе предыдущей доступной записи(записей).