Заполнение таблицы разными медианами
Дано две таблицы. Одна эта датафрейм, вторая с медианами зарплат в зависимости от занятости.
**занятость** **медиана зарплат**
0 безработный 131339.751676
1 в декрете 53829.130729
2 госслужащий 150447.935283
3 компаньон 172357.950966
4 пенсионер 118514.486412
5 предприниматель 499163.144947
6 сотрудник 142594.396847
7 студент 98201.625314
Как заполнить пропуски в датафрейме разными медианами. Тесть если есть пропуск в зарплате пенсонера в датафрейме, то он заполнился именно медианой которая ему соответствует.
Исходные данные имеют вид:
Я придумал условие которое можно вручную сделать по каждому пункту, но как сохранить изменения пока не придумал. Тоесть после всех условий исходный df не меняется и есть все равно пропуски.
df[df['income_type'] == 'сотрудник'] ['total_income'].fillna(142594.396847)
Ответы (2 шт):
Нужно просто продумать по шагам действия
- делаем фильтр интересующих нас записей с
NAв доходе - заполняем их, соединяя с датафреймом с медианным доходом
df_mask = df['total_income'].isna()
df.loc[df_mask, 'total_income'] = \
df.loc[df_mask, ['сотрудник']].join(df_median, on='сотрудник')['median_income']
Код приблизительный, но должно работать. Вы в своём коде никуда результат не присваиваете, поэтому он не запоминается.
Кто там про воспроизводимый пример пишет, я не знаю что это такое.
Первый вариант.
Набросали мне такой код в цикле можно сделать!
for income_item in df['income_type'].unique():
for education_item in df['education'].unique():
median_value = df[(df['income_type'] == income_item) & (df['education'] == education_item)]['total_income'].median()
df.loc[(df['income_type'] == income_item) & (df['education'] == education_item), 'total_income'] = df.loc[(df['income_type'] == income_item) & (df['education'] == education_item), 'total_income'].fillna(median_value)
Второй вариант через групировку по условию/условиям и фунуцию transform()
median_table = df.groupby('income_type')['total_income'].transform('median')
А позже передать эту таблицу для заполнения пропусков.
df['total_income'] = df['total_income'].fillna(median_table)
