Python вменяемые значения, используя медиану, указанную c выбор значения столбца - PullRequest
0 голосов
/ 05 февраля 2020

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

ID Salary Position
1  10     VP
2         VP
3  5      VP
4  15     AVP
5  20     AVP
6         AVP

Теперь пустые зарплаты должны быть заменены на уровень позиции Медиана. Например: чистая зарплата для ID = 2 и позиция в качестве VP должны вменяться медианой положения VP, равной 5, и такой же бланк для AVP должен вменяться аналогичным образом.

Я использовал следующий код, но он принимает полную медиану, а не указанную c единицу на уровне позиции:

impute_median=df['Salary'].median()
df['Salary']=df['Salary'].fillna(impute_median)

Вывод должен выглядеть следующим образом:

   ID Salary Position
   1      10     VP
   2      5      VP
   3      5      VP
   4      15     AVP
   5      20     AVP
   6      15     AVP

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Чтобы заполнить median, вы должны использовать:

df['Salary'] = df['Salary'].fillna(df.groupby('Position').Salary.transform('median'))
print(df)
   ID  Salary Position
0   1    10.0       VP
1   2     7.5       VP
2   3     5.0       VP
3   4    15.0      AVP
4   5    20.0      AVP
5   6    17.5      AVP

, если вы хотите заполнить с ближайшим к среднему значению (меньше)

df['Salary'] = df['Salary'].fillna(df.Salary.sub(df.groupby('Position')
                                    .Salary
                                    .transform('median'))
                           .where(lambda x: x.le(0))
                           .groupby(df['Position'])
                           .transform('idxmax')
                           .map(df['Salary']))
print(df)
0   1    10.0       VP
1   2     5.0       VP
2   3     5.0       VP
3   4    15.0      AVP
4   5    20.0      AVP
5   6    15.0      AVP 
1 голос
/ 05 февраля 2020

Попробуйте это:

df['Salary']=df.groupby(['Position'])['Salary'].apply(lambda x:x.fillna(x.median()))

По сути, мы применяем групповое положение к позиции относительно заработной платы, а затем заполняем медианой каждой группы.

...