Как заменить 0 значений на среднее по группам - PullRequest
0 голосов
/ 05 июля 2018

У меня есть фрейм данных с двумя функциями: gps_height (числовой) и регион (категориальный).

gps_height содержит множество значений 0, которые в этом случае отсутствуют. Я хочу заполнить значения 0 средним значением когерентной области.

Мои рассуждения таковы: 1. Сбросьте нулевые значения и возьмите средние значения gps_height, сгруппированные по регионам

.
df[df.gps_height !=0].groupby(['region']).mean()

Но как заменить нулевые значения в моем фрейме данных этими средними значениями?

Пример данных:

регион gps_height 0 1390 Иринга 1 1400 мара 2 0 Иринга 3 250 Иринга ...

1 Ответ

0 голосов
/ 05 июля 2018

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

df = pd.DataFrame({'region':list('aaabbbccc'),
                   'gps_height':[2,3,0,3,4,5,1,0,0]})
print (df)
  region  gps_height
0      a           2
1      a           3
2      a           0
3      b           3
4      b           4
5      b           5
6      c           1
7      c           0
8      c           0

Заменить 0 на пропущенные значения, а затем заменить NAN s на fillna на mean s на GroupBy.transform для групп:

df['gps_height'] = df['gps_height'].replace(0, np.nan)
df['gps_height']=df['gps_height'].fillna(df.groupby('region')['gps_height'].transform('mean'))
print (df)
  region  gps_height
0      a         2.0
1      a         3.0
2      a         2.5
3      b         3.0
4      b         4.0
5      b         5.0
6      c         1.0
7      c         1.0
8      c         1.0

Или отфильтровать 0 значений, объединить means и отобразить все 0 строк:

m = df['gps_height'] != 0
s = df[m].groupby('region')['gps_height'].mean()
df.loc[~m, 'gps_height'] = df['region'].map(s)
#alternative
#df['gps_height'] = np.where(~m, df['region'].map(s), df['gps_height'])
print (df)
  region  gps_height
0      a         2.0
1      a         3.0
2      a         2.5
3      b         3.0
4      b         4.0
5      b         5.0
6      c         1.0
7      c         1.0
8      c         1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...