Как заполнить пропущенные значения столбца средним значением определенного класса c другого столбца? - PullRequest
0 голосов
/ 01 марта 2020

Я разделяю часть моего большого блока данных, чтобы задать свой вопрос. В столбце Возраст есть два пропущенных значения, которые являются первыми двумя строками. Способ, которым я собираюсь их заполнить, основан на следующих шагах:

  1. Рассчитать среднее значение возраста для каждой группы. (Предположим, что среднее значение Age в группе A равно X )
  2. Итерирование по столбцу Age для обнаружения нулевых значений (которые принадлежат первым двум строкам)
  3. Return Групповое значение каждого значения NULL возраста (которое равно 'A')
  4. Заполните эти нулевые значения Age средним значением возраста их соответствующей группы (первые две строки принадлежат A затем заполните их значения возраста NULL X )

Я знаю, как выполнить шаг 1, я могу использовать data.groupby('Group')['Age'].mean(), но не знаю, как перейти к концу Шаг 4.

Спасибо.

enter image description here

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

Использование:

df['Age'] = (df['Age'].fillna(df.groupby('Group')['Age'].transform('mean'))
                      .astype(int))
1 голос
/ 01 марта 2020

Полагаю, вы ищете что-то вроде этого:

df['Age'] = df.groupby(['Name'])['Age'].transform(lambda x: np.where(np.isnan(x), x.mean(),x))

Предположим, ваши данные выглядят так (я не копировал весь фрейм данных)

    Name    Age
0   a   NaN
1   a   NaN
2   b   15.0
3   d   50.0
4   d   45.0
5   a   8.0
6   a   7.0
7   a   8.0

вы наберете:

df['Age'] = df.groupby(['Name'])['Age'].transform(lambda x: np.where(np.isnan(x), x.mean(),x))

и получите:

    Name    Age
0   a   7.666667   ---> The mean of group 'a'
1   a   7.666667
2   b   15.000000
3   d   50.000000
4   d   45.000000
5   a   8.000000
6   a   7.000000
7   a   8.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...