Лучший способ думать об этом, это отрицательные числа на.Итак, давайте сделаем это:
train_df1[train_df1 < 0] = np.nan
Теперь давайте создадим новый столбец со средним по категории:
grouped = train_df1.groupby('item_category')['item_cnt_day'].mean()
Создайте новый столбец со средним по категории:
train_df1['category_mean'] = train_df1.merge(grouped, left_on='item_category', right_index=True)
Теперь заполните значения na:
train_df1.item_cnt_day.fillna(train_df1.category_mean)