Да я тут а.х. фигел уже одну штуку дочить... Пытался заменить пропущенные значения средними значениями по группам. Все шло хорошо, пока не дошло дело до самой замены. Получилось что df фильруем несколько раз .loc Ами с условиями, и как я понял все это приводит к тому, что pandas просто даёт тебе копию отфильтрованную, и все изменения на основном датафрейме не отражается. Могу кодом поделится если интересно. Хз как это обойти. Думаю уже через replace работать
if pd.isnull(Df.iloc[i,j]): Df[i,j]=Df[Df.column == value][column_name].mean()/or median()
ужс какой df[что заполняем] = df.groupby(по чему группируем).transform(lambda xs: xs.fillna(xs.mean()))
Я не фанат такого стиля)) функционального
1. это не “функциональный стиль”. 2. смысл пандасов в оптимизированных операциях, которые выполняются сишно-фортранным кодом. работа циклами и вот это .loc[i, j] говно сводит все оптимизации на нет.
Открой почитай про функциональный стиль)
открой доку по пандасам прочитай. я с фп работаю дольше, чем ты про него знаешь.
https://ru.m.wikibooks.org/wiki/Python/Функциональное_программирование_на_Python
Я так делал, но спасибо. Там хрень в копиях фреймов. Почитай документацию, там почти во всех случаях сложной, да и простой индексации, возвращается копия фрейма. Я короч залупил построчно и получилось. Но это долго будет на бигдата
Это интересный вариант, но Разве могу я df[столбец] серии заменить пропуски, присвоив группы ?
.groupby(...).transform(...) отдает результат такой же формы, как и до групбая. Раскрывает группу на оригинальный индекс.
Очень круто, благодарю. Попробую сегодня таким образом
df.loc[:, 'total_income'] = df.groupby(['education', 'income_type' ]).transform(lambda xs: xs.fillna(xs.mean())) Вот так заработало, без .loc он все в копию пуляет....
он не пуляет в “копию”, он заменяет колонку. еще можно делать df = df.assign(col_name=df.groupby…)
Обсуждают сегодня