Заполните NaN со средним значением с группой по - PullRequest
0 голосов
/ 01 октября 2019

мой набор данных выглядит следующим образом

Month DayOfWeek  Class A1  A2 ... A999
July  Monday     Bata  7   9  ... 5
July  Tuesay     Bata  3   1  ... 2
July  Sunday     Bata  4   5  ... 6
July  Monday     Adid  9   8  ... 5
July  Sunday     Adid  4   0  ... 4
Sept  Monday     Nike  7   5  ... 7
Sept  Sunday     Nike  8   3  ... 7
Sept  Satday     Adid  2   7  ... 7
Sept  Monday     Bata  8   9  ... 4
Oct   Monday     Nike  4   2  ... 5
Oct   Sunday     Bata  8   6  ... 3
July  Monday     Nike  NaN NaN    NaN
Sept  Sunday     Nike  NaN NaN    NaN
Oct   Satday     Nike  NaN NaN    NaN
Sept  Monday     Bata  NaN NaN    NaN

Я хочу заполнить NaNs средним значением предыдущих записей

Я знаю, что могу использовать

df['A1'] = df['A1'].fillna((df['A1'].mean()))

но это плохой способ, потому что у меня есть более 1000 столбцов, и они могут увеличиться позже

добавить к этому

Я хочу найти среднее на основе Месяца иDayOfWeek

для этой записи

July  Monday     Nike  NaN NaN    NaN

, поэтому среднее будет только средним из записей, которые имеют Month = July & DayOfWeek = Monday

как я могу это сделать?

1 Ответ

1 голос
/ 01 октября 2019

Вот, пожалуйста:

df['A1'] = df.groupby(['Month','DayOfWeek'])['A1'].transform(lambda x: x.fillna(x.mean()))

Вышеприведенное все равно даст одно нулевое значение, потому что нет значения для "Month = Oct & DayOfWeek = Monday". В этом случае вы можете написать второй код, чтобы заполнить его средним значением за месяц или средним значением DayOfWeek. Приведенный ниже фрагмент кода заполняет пустые значения средним значением месяца записей нулевым значением:

df['A1'] = df.groupby('Month')['A1'].transform(lambda x: x.fillna(x.mean()))

Upvote, если это помогает

...