Не записывает значения в pd.DataFrame

Пишу свой класс групповой импутации данных, когда по какой-то категории одного признака считается статистика других признаков, и этой статистикой заполняются пропуски в данных. Код класса:

class StepanGroupImputer():

    def __init__(self,aggfun='mean'):
        self._group_impute_dict = {}
        self.aggfun = aggfun


    def fit(self,x, by_column, group_columns, aggfun, y=None):

        # По каждому столбцу, в котором надо заполнить пропуски выполним вычисление групповых значений агрегирующих функций
        for col in group_columns:
            # Если аггрегирующая функция присуща числовым типам, то...
            if aggfun in ['max','min','mean','median']:

                # Значения агрегирующей функции aggfun по категориям переменной by_column, 
                # преобразованные в словарь. Поскольку изначально выбрано минимально необходимое 
                # подмножество, состоящее из группирующей категориальной фичи и группируемой числовой,
                # то, чтобы избавиться от ключа-кортежа - обращаемся к методу .values(), полученную структуру
                # обращем в список и выбираем нулевой и единственный элемент, который представляет собой
                # элементарный словарь структуры {cat_1: aggfunc_value_1,
                #                                 cat_2: aggfunc_value_2,
                #                                 cat_3: aggfunc_value_3, ...}
                agg_stats = list(x[[by_column,col]].groupby(by=by_column).agg(aggfun).to_dict().values())[0]

                # Элементарный словарь добавляется в словарь верхнего уровня под ключем - названием количественной фичи
                # со структурой {col_1: {cat_1: aggfunc_value_1,
                #                        cat_2: aggfunc_value_2,
                #                        cat_3: aggfunc_value_3, ...},
                #                col_2: {cat_1: aggfunc_value_1,
                #                        cat_2: aggfunc_value_2,
                #                        cat_3: aggfunc_value_3, ...} ...}
                self._group_impute_dict[col] = agg_stats


            # Если же аггрегирующая функция присуща строковым категориальным переменным,
            # в частности мода, то...
            elif aggfun=="mode":

                # Получение аналогичного словаря, только с помощью метода apply и лямбда-функции. 
                # Элементарный словарь будет иметь немного неудобую структуру, где ключами будут кортежи
                # {(cat_1, 0): aggfunc_value_1,
                #  (cat_2, 0): aggfunc_value_2,...}

                agg_stats = [[by_column,col]].groupby(by=by_column)[col].apply(lambda x: x.mode()).to_dict()
                self._group_impute_dict[col] = agg_stats

            else:
                raise AttributeError("Несоответствующее значение"+aggfun)

        print(self._group_impute_dict)

        return self

    def transform(self,x, by_column, group_columns, rewrite):

        for col in group_columns:
            for cat in self._group_impute_dict[col]:
                #print(x[x[by_column]==cat][col])
                cat_index = x[x[by_column]==cat].index
                #x.loc[cat_index,col] = np.where(x[x[by_column]==cat][col]==np.nan,
                #                                    round(self._group_impute_dict[col][cat]),
                #                                    x[x[by_column]==cat][col])
                x.loc[cat_index,col].fillna(round(self._group_impute_dict[col][cat]),inplace=rewrite)

        return x

Однако при методе transform

Замена пропусков не происходит. Как это исправить? Благодарю.


Ответы (0 шт):