Задача 02D. fillna_date

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:256 Мб
Максимальный балл:1  

Условие

Требуется на языке Python реализовать функцию fillna_date. Функция должна иметь следующий интерфейс:

import pandas as pd

def fillna_date(data: pd.DataFrame, function: str = 'mean') -> pd.DataFrame:
    '''Fills NaN values in every column in `data` with values obtained by applying aggregate `function` over a month.
       If every value within a month is NaN the fill value is obtained over a year.
       If every value within a year is NaN the fill value is obtained over the whole column.

    Arguments:
        data: a pandas DataFrame, with datetime index
        function: aggregate function to be used for obtaining fill value.
            Possible values are: "mean", "median", "max", "min"

    Returns:
        a new pandas DataFrame with NaN values replaced
        '''
    pass

Датафрейм data содержит несколько вещественнозначных колонок, индексируемых объектами типа datetime. Функция fillna_date заменяет значения NaN в каждом столбце датафрейма data на значение, полученное путём применения функции агрегации function внутри соответствующего месяца. Если все значения в этом месяцы равны NaN, новое значение получается из соответствующего года. Если же и все значения в году равны NaN, значение получается из всего столбца. Гарантируется, что в каждом столбце хотя бы одно значение не равно NaN.

Допустимыми значениями параметра function являются строки: "mean", "median", "max", "min".

При решении задачи запрещено применять операторы циклов и условий языка Python для обработки датафрейма.

Входные данные из примера можно скачать здесь.

Формат выходных данных

Код решения должен содержать только импортируемые модули, определение и реализацию класса.

Примеры тестов

Стандартный вход Стандартный выход
1 data = pd.read_csv('input.csv', index_col='date') data = fillna_date(data) data.to_csv('output.csv') output.csv

0.111s 0.017s 17