Как рассчитать среднее значение столбца, но только с учетом определенных строк? - PullRequest
1 голос
/ 07 апреля 2019

Я работаю с автомобилем.csv, который можно найти на сайте UCI.Я хочу заменить некоторые NaN в атрибуте нормализованных потерь.Я полагал, что лучший способ сделать это - вычислить среднее значение в соответствии с символикой, потому что символизация влияет на значение нормализованных потерь.

Так что, если NaN имеет символизацию 3, я хочу только среднее значение других нормализованных потерь.которые имеют значение 3 в качестве их символики.Как мне добиться этого?

пример таблицы:

symb    norm    other attrs
1        100  8017  2
1        90  5019  2
-1       20   8017  1
-1       20    8870  1
1        NaN    8305  3
0        10   8305  3
3        200  8221  3

, поэтому для NaN я хочу получить среднее значение только для других строк с таким же символом

, если я использую

automobile['normalizedlosses'].fillna(automobile['normalizedlosses'].mean(axis=0), inplace=True)

Это заменит все NaN с тем же значением, которое я не хочу

1 Ответ

2 голосов
/ 07 апреля 2019

Вы можете использовать GroupBy.transform с mean для возврата Series с тем же размером, что и исходный DataFrame, поэтому можно использовать Series.fillna этим Series:

s = automobile.groupby('symb')['norm'].transform('mean')
automobile['norm'] = automobile['norm'].fillna(s)

print (automobile)
   symb   norm  other  attrs
0     1  100.0   8017      2
1     1   90.0   5019      2
2    -1   20.0   8017      1
3    -1   20.0   8870      1
4     1   95.0   8305      3
5     0   10.0   8305      3
6     3  200.0   8221      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...